Сортировка XML по именам атрибутов с использованием XSLT - PullRequest
1 голос
/ 17 марта 2011

Может ли кто-нибудь подсказать, как отсортировать XML по именам атрибутов с помощью XSLT?

Например: мой XML выглядит следующим образом

</p> <pre><code><?xml version="1.0" encoding="UTF-8"?> <root> <!-- test 1 --> <test g="r"> <a g="c" d="e">one</a> <!-- a k z d b --> <a k="z" d="b">two</a> <a s="h" d="5">three</a> <!-- a a b d 4 --> <a a="b" d="4">four</a> <a b="q" d="3">five</a> <a s="a" d="8">3three</a> <a x="i" d="2">six</a> <!-- six 2 a f h i 2 --> <a f="h" i="2">six</a> <a l="t" d="1">seven</a> </test> <!-- test 2 --> <test t="b"> <!-- six 2 a z i d 2 --> <a z="i" d="2">six</a> <a r="z" d="b">two</a> <a a="c" d="e">one</a> <a u="h" d="5">three</a> <!-- four --> <a c="b" d="4">four</a> <a h="q" d="3">five</a> <a p="t" d="1">seven</a> </test> </root>

ожидаемый результат должен быть:

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <!-- test 1 -->
    <test g="r">
        <!-- a a b d 4 -->
        <a a="b" d="4">four</a>
        <a b="q" d="3">five</a>
        <a g="c" d="e">one</a>
        <!-- six 2 a f h i 2 -->
        <a f="h" i="2">six</a>      
        <!-- a k z d b -->
        <a k="z" d="b">two</a>
        <a l="t" d="1">seven</a>
        <a s="a" d="8">3three</a>
        <a s="h" d="5">three</a>
        <a x="i" d="2">six</a>
    </test>
    <!-- test 2 -->
    <test t="b">
        <a a="c" d="e">one</a>
        <!-- four -->
        <a c="b" d="4">four</a>
        <a h="q" d="3">five</a>
        <a p="t" d="1">seven</a>
        <a r="z" d="b">two</a>
        <a u="h" d="5">three</a>
        <!-- six 2 a z i d 2 -->
        <a z="i" d="2">six</a>
    </test>
</root>

Ответы [ 3 ]

2 голосов
/ 17 марта 2011

Я подозреваю, что вы, возможно, захотите отсортировать по имени первого атрибута.Это невозможно, потому что порядок атрибутов не имеет значения в XML, и вы не можете предсказать, какой атрибут @ * [1] выберет.

0 голосов
/ 20 марта 2011

Я сам нашел решение .. Ниже приведена строка кода, которая будет использоваться для сортировки по именам атрибутов.

<xsl:sort select="local-name(@*)"/>

Ребята, спасибо за все ваши усилия.

0 голосов
/ 17 марта 2011
  <xsl:template match="test">
    <xsl:apply-templates>
      <xsl:sort select="@d"/>
    </xsl:apply-templates>
  </xsl:template>

даст вам элементы в test, отсортированные по атрибуту d.

Вы можете сделать несколько уровней сортировки, добавив еще один xsl:sort.

Подробнее о сортировке здесь: http://www.w3.org/TR/xslt#sorting

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...