XSLT:通过其他元素的值选择元素
问题描述:
如何输出依赖于其他元素值的一个元素的值? 我想到位XXXXSLT:通过其他元素的值选择元素
<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中会有什么值val 我该如何实现它?
答
一个回答你的问题是要做到这一点...
<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" />
但我猜你可能有多个node4
元素你的XML,也许你想得到每个人的价值?在这种情况下,它会看起来更像这个...
<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>