如何输出一个依赖于其他元素值的元素的值? 我想用另一个元素的值代替XXX
<xsl:value-of select="/node1/node2[@name=XXX]"/@lng>
并且在XXX我想要的价值:
/node3/node4/@val
简化的xml:
<node>
<node1>
<node2 name="abc" lng="uk">
</node2>
</node1>
<node3>
<node4 val="abc">
</node4>
</node3>
</node>
我知道可以通过以下方式实现:
<xsl:value-of select="/node1/node2[@name='abc']"/@lng>
但我不知道node4 / @ val中的值是多少 我怎样才能实现它?
答案 0 :(得分:1)
你的问题的一个答案就是这样做......
<xsl:value-of select="/node/node1/node2[@name=/node/node3/node4/@val]/@lng" />
或稍好一点,使用变量
<xsl:variable name="node4val" select="/node/node3/node4/@val" />
<xsl:value-of select="/node/node1/node2[@name=$node4val]/@lng" />
但我猜你的XML中可能有多个node4
元素,也许你想获得每个元素的值?在这种情况下,它看起来更像是......
<xsl:for-each select="/node/node3/node4">
<xsl:value-of select="/node/node1/node2[@name=current()/@val]/@lng" />
</xsl:for-each>
或者,使用变量
<xsl:for-each select="/node/node3/node4">
<xsl:variable name="val" select="@val" />
<xsl:value-of select="/node/node1/node2[@name=$val]/@lng" />
</xsl:for-each>
更好的是使用密钥。试试这个,例如
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:key name="node2s" match="node2" use="@name" />
<xsl:template match="/">
<xsl:for-each select="/node/node3/node4">
<xsl:value-of select="key('node2s', @val)/@lng" />
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>