我真的不能说得更好,所以我将举一个例子:
XML:
<root>
<foo>
<bar id="1">sdf</bar>
<bar id="2">sdooo</bar
</foo>
<feng>
<heppa id="4">hihi</heppa>
<heppa id="2">sseeapeea</heppa>
<heppa id="1">....</heppa>
</feng>
</root>
XSLT:
<xsl:for-each select="/root/foo/bar">
<p>
<xsl:value-of select="." />: <xsl:value-of select="/root/feng/heppa[@id = @id]" />
</p>
</xsl:for-each>
所需的输出:
<p>sdf: ....</p>
<p>sdooo: sseeapeea</p>
实际输出:
<p>sdf: hihi</p>
<p>sdooo: hihi</p>
最佳答案
仅使用XPath 1.0选择节点,您需要进行节点集比较:
/root/feng/heppa[@id=/root/foo/bar/@id]
当然,这具有NxM的复杂性(与其他XSLT解决方案一样)
在XSLT 1.0中,您应该使用键,因为存在交叉引用:
<xsl:key name="kBarById" select="bar" use="@id"/>
<xsl:template match="/root/feng/heppa[key('kBarById',@id)]">
<p>
<xsl:value-of select="concat(key('kBarById',@id),': ',.)"/>
</p>
</xsl:template>
关于xslt - 如何基于与正在搜索的树中的属性同名的属性,在循环中获取带有xpath的XML节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3863714/