XSLT排序阿拉伯字母



我有xml喜欢:

<Answers>
  <QuestionAnswer Id="1" Answer="أقل من 16 عام"/>
  <QuestionAnswer Id="2" Answer="17 – 24 عامً"/>
  <QuestionAnswer Id="3" Answer="25- 34 عامً"/>
  <QuestionAnswer Id="4" Answer="35-  44 عامً"/>
  <QuestionAnswer Id="5" Answer="أكثر من 45 عامً"/>
</Answers>

XSL:

<xsl:for-each select=".//QuestionAnswer">
  <xsl:variable name="AnswerId" select="@Id"/>
  <xsl:variable name="AnswerText" select="@Answer"/>
  <xsl:value-of select="concat(' ',$AnswerId, ' &quot;', $AnswerText, '&quot;')" />
</xsl:for-each>

和返回应该是XML的顺序,但由于阿拉伯语字符而处于奇怪的顺序。

我该如何修复?

1 "أقل من 16 عام" 
2 "17 – 24 عامً" 
3 "25- 34 عامً" 
4 "35-  44 عامً" 
5 "أكثر من 45 عامً"

如果要对@answer的值进行排序,则应该能够使用

<xsl:for-each select=".//QuestionAnswer">
  <xsl:sort select="@Answer" lang="ar"/>

您可以进一步限定语言代码,例如lang="ar-EG"根据埃及使用的阿拉伯语规则进行分类。我对阿拉伯语一无所知,所以我不知道这是否是必要的。

当然,可能是您的XSLT处理器不支持所有可能的语言代码。

尝试将RTL Unicode添加到您的句子中:

<xsl:variable name="rightToLeftUnicode" select="'&#x200E;'"></xsl:variable>
<xsl:value-of select="concat(' ',$AnswerId, ' &quot;', $AnswerText, '&quot;', $rightToLeftUnicode)" />

最新更新