【问题标题】:XSLT: sorted list from multiple elementsXSLT:来自多个元素的排序列表
【发布时间】: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-sort w3.org/TR/xslt-30/#creating-sorted-sequence 来完成,例如&lt;xsl:perform-sort select="//index-elements, //figures"&gt;&lt;xsl:sort select="."/&gt;&lt;/xsl:perform-sort&gt;。 XSLT/XPath 3 还有一个sort 函数w3.org/TR/xpath-functions/#func-sort,它最简单的形式sort((//index-elements, //figures)) 可能就足够了,或者,当支持高阶函数时,允许您使用函数定义排序键。

标签: xml xslt oxygenxml


【解决方案1】:

我通过扩展所有 //index-elements//name. 的 for-each 序列解决了这个问题 我不知道对 select 参数使用两个 x-path 搜索结果。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-07
    • 2010-10-11
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 2019-08-13
    • 1970-01-01
    相关资源
    最近更新 更多