我有一个for-each我希望按某种值排序。但我循环的东西只有一个允许连接到值的键。文档的一个简单示例:
<foo>
<keys>
<key id="foo"/>
<key id="bar"/>
</keys>
<things>
<thing name="foo"><desc>some description</desc></thing>
<thing name="bar"><desc>another description</desc></thing>
</things>
</foo>
样式表:
<xsl:for-each select="/foo/keys/key">
<xsl:sort select="/foo/things/thing[@name=@id]"/>
<xsl:value-of select="@id"/>
</xsl:for-each>
这似乎不起作用。 @id
与循环中的key
元素相关; @name
与谓词中的thing
相关。我该如何解决这个问题?我尝试将/foo/keys/key/@id
分配给变量并使用它,但<sort>
必须是for-each中的第一个元素......
答案 0 :(得分:1)
使用current()
功能:
<xsl:sort select="/foo/things/thing[@name = current()/@id]"/>
参考:http://www.w3.org/TR/xslt#misc-func
XML:
<foo>
<keys>
<key id="1"/>
<key id="2"/>
<key id="3"/>
<key id="4"/>
</keys>
<things>
<thing name="2">
<desc>a</desc>
</thing>
<thing name="4">
<desc>b</desc>
</thing>
<thing name="3">
<desc>c</desc>
</thing>
<thing name="1">
<desc>d</desc>
</thing>
</things>
</foo>
XSLT:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" />
<xsl:template match="/">
<xsl:for-each select="/foo/keys/key">
<xsl:sort select="/foo/things/thing[@name = current()/@id]"/>
<xsl:value-of select="@id"/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
输出:
2431