鉴于两个不同的节点,如何使用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的情况,只有第二个节点对我有用。正如您可能猜测的那样,实际数据更加复杂,但概念是相同的。
答案 0 :(得分:0)
定义一个键
<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>
我假设您要对produce元素中的类型元素进行排序,尽管您的代码似乎试图对根元素进行排序。