在下面的xml代码中,我需要使用xslt将“b1”和“b2”作为输出

时间:2011-04-29 15:12:13

标签: xml xslt

在下面的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

2 个答案:

答案 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']">