在下面的xml代码中,我需要使用xslt将“b1”和“b2”作为输出。
<xml>
<a>
<b>
<b1>b1value</b1>
<b2>b2value</b2>
</b>
<b>
<b1>b1value2</b1>
<b2> 2value2</b2>
</b>
</a>
</xml>
我写了以下XSLT:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<xsl:for-each select="xml/a/b/*[b1='b1value']">
<xsl:value-of select="local-name()"/>
<br> </br>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
但它没有给我任何输出..为什么?
相反,如果我写
<xsl:for-each select="xml/a/b/*">
<xsl:value-of select="local-name()"/>
输出是:
b1
b2
b1
b2
我需要的输出是:
b1
b2
答案 0 :(得分:1)
目前还不清楚你想要输出什么。
但是,您的XSLT没有获得任何输出的原因是,在您的for-each
中,您的xpath正在寻找<b>
同时拥有子<b>
的孩子包含“b1value”。
您需要移动谓词:
<xsl:template match="/">
<html>
<body>
<xsl:for-each select="xml/a/b[b1='b1value']/*">
<xsl:value-of select="local-name()"/>
<br> </br>
</xsl:for-each>
</body>
</html>
</xsl:template>
答案 1 :(得分:0)
你的意思是:
<xsl:for-each select="xml/a/b/*[text()='b1value']">