【发布时间】:2018-07-03 13:50:11
【问题描述】:
我想从一个 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
【问题讨论】:
-
不知道为什么你提到
for-each-group如果你想对一个序列进行排序,XSLT 2 或 3 中的排序可以用perform-sortw3.org/TR/xslt-30/#creating-sorted-sequence 来完成,例如<xsl:perform-sort select="//index-elements, //figures"><xsl:sort select="."/></xsl:perform-sort>。 XSLT/XPath 3 还有一个sort函数w3.org/TR/xpath-functions/#func-sort,它最简单的形式sort((//index-elements, //figures))可能就足够了,或者,当支持高阶函数时,允许您使用函数定义排序键。