如何使用一个 XML 节点的 prder 对另一个节点进行排序?



给定两个不同的节点,如何使用id上匹配的第一个(水果)的顺序对第二个(产品)进行排序?

<root>
    <fruit>
        <type id="3">Apple</type>
        <type id="32">Tomato</type>
        <type id="45">Pear</type>
        <type id="119">Pineapple</type>
    </fruit>
    <produce>
        <type id="45" location="aisle-five">Pear</type>
        <type id="3" location="aisle-one">Apple</type>
        <type id="119" location="aisle-seven">Pineapple</type>
        <type id="32" location="aisle-three">Tomato</type>
    </produce>
</root>

XSLT应该是这样的。。。

<xsl:template match="/">
    <xsl:apply-templates select="root"> 
        <xsl:sort select="???" order="ascending" data-type="number" />
    </xsl:apply-templates>  
</xsl:template>
<xsl:template match="root/produce">
    <xsl:value-of select="type/@location" />
</xsl:template> 

期望输出:

aisle-one
aisle-five
aisle-three
aisle-seven

在这种情况下,我无法控制XML,只有第二个节点对我有用。正如你所猜测的,实际数据要复杂得多,但概念是一样的。

定义关键

<xsl:key name="sort-key" match="/root/fruit[1]/type" use="."/>

然后你的分类可以是

<xsl:apply-templates match="produce">
  <xsl:sort select="key('sort-key', .)/@id" data-type="number"/>
</xsl:apply-templates>

我假设您希望对product元素中的type元素进行排序,尽管您的代码似乎正在尝试对根元素进行排序。

相关内容

  • 没有找到相关文章