XSLT排序阿拉伯字母

时间:2016-12-28 14:43:33

标签: 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 عامً"

2 个答案:

答案 0 :(得分:1)

如果你想对@Answer的值进行排序,那么你应该可以使用

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

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

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

答案 1 :(得分:0)

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

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