XSLT: отсортированный список из нескольких элементов - PullRequest
0 голосов
/ 03 июля 2018

Я хочу создать упорядоченный по алфавиту список из файла XML. В XML-файле у меня есть много <index-elements>, которые должны быть частью списка, я просто выбираю их все //index-elements. Я также хочу добавить другой вид элементов, называемый <name>, к тому же списку в правильной позиции (по алфавиту). Обычно я использую цикл <xsl:for-each-group group-by="..." select="..."> в сочетании с функцией <xsl:sort lang="lang-code">, но я не могу выбрать более одного набора узлов. Это первый случай, когда мне нужно добавить два разных элемента в один отсортированный результат. На данный момент я не знаю, как решить эту проблему.

XML

<section>
    <child>
        <index-elements>Gamma</index-elements>
    </child>
    <child>
        <index-elements>Zeta</index-elements>
    </child>
</section>

<section>
    <child>
        <index-elements>Alpha</index-elements>
    </child>
    <child>
        <new-element>
            <index-elements>Delta</index-elements>
        </new-element>            
    </child>
</section>    

<section>
    <some-element>
        <name>Epsilon</name>
    </some-element>
    <some-element>
        <name>Beta</name>
    </some-element>
</section>  

Ожидаемый результат

Alpha Beta Gamma Delta Epsilon Zeta

1 Ответ

0 голосов
/ 12 июля 2018

Я решил это, расширив последовательность for-each для всех //index-elements и //name. Я не знал об использовании двух результатов поиска по x-path для аргумента select.

<xsl:for-each select="//index-elements, //name"> <xsl:sort lang="{$langCode}"/> <xsl:value-of select="current()/text()"/> </xsl:for-each>

...