2016-12-28 4 views
2

У меня есть XML, как:XSLT сортировать арабские буквы

<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 عامً" 
+0

Пожалуйста, попробуйте уточнить ваш вопрос. Что именно вы пытаетесь достичь? –

+0

Вы печатаете результат своей трансформации на терминале? Если да, попробуйте перенаправить вывод в файл и посмотрите на этот файл с достойным текстовым редактором. Вы можете обнаружить, что проблема - это только проблема отображения. –

+0

Это глупо, но у меня есть проблема с разглядыванием данных corercly с арабскими буквами – karolio007

ответ

1

Если вы хотите отсортировать по величине @Answer, то вы должны быть в состоянии использовать

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

Вы можете дополнительно квалифицироваться код языка, например, lang="ar-EG" дает сортировку в соответствии с правилами для арабского, используемыми в Египте. Я ничего не знаю об арабском, поэтому я не знаю, нужно ли это.

Конечно, возможно, ваш XSLT-процессор не поддерживает все возможные языковые коды.

+0

Вопрос очень неясен, но я думаю, что OP хочет сортировать записи по числовым значениям, содержащимся в ответах, и сортировать числовые значения в пределах одного ответа. –

+0

Спасибо, Майкл, я пробовал это решение, но он не работает – karolio007

+0

Это не сортировка значений по номерам. Странным также является результат функции position(). Он возвращает значение текста ответа не в реальной позиции только в «арабской ситуации». – karolio007

0

Попробуйте добавить Юникод RTL к вашим предложениям:

<xsl:variable name="rightToLeftUnicode" select="'&#x200E;'"></xsl:variable> 
<xsl:value-of select="concat(' ',$AnswerId, ' &quot;', $AnswerText, '&quot;', $rightToLeftUnicode)" /> 
Смежные вопросы