仅某些节点的XML排序列表

时间:2019-03-17 17:42:26

标签: sorting

我有以下XML文件。我需要按升序打印仅选定节点(总计)的列表。我尝试使用 sort 函数,但是出现了一些我无法识别的错误,它返回了所有内容,包括初始文件中其他节点的值。
XML输入:

<?xml version="1.0" encoding="UTF-8"?>
<Invoice>
    <From>
        <Name>Lucy</Name>
        <Country>UK</Country>
    </From>
    <To>
        <Name>John</Name>
        <Country>US</Country>
    </To>
    <Items>
        <Position>
            <Name>Table</Name>
            <Total>1</Total>
        </Position>
        <Position>
            <Name>Chair</Nr>
            <Total>4</Total>
        </Position>
        <Position>
            <Name>Cup</Name>
            <Total>5</Total>
        </Position>
        <Position>
            <Name>Box</Name>
            <Total>4</Total>
        </Position>     
    </Items>
</Invoice>

如何使用所需的输出? 任何帮助是极大的赞赏!谢谢!

1 个答案:

答案 0 :(得分:0)

从给定输入生成所需输出的一种显而易见的方法是使用xsl:for-each并同时使用xsl:sort

<xsl:template match="/Invoice">
    <SortedTotalList xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <xsl:for-each select="Positions/Position">
        <xsl:sort select="Total"/>
        <xsl:copy-of select="Total" />
      </xsl:for-each>
    </SortedTotalList>
</xsl:template>

输出为:

<?xml version="1.0"?>
<SortedTotalList xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <Total>1</Total>
    <Total>4</Total>
    <Total>4</Total>
    <Total>5</Total>
</SortedTotalList>