给定两个不同的节点,如何使用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元素进行排序,尽管您的代码似乎正在尝试对根元素进行排序。