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

发布于 2024-11-04 06:43:20 字数 1150 浏览 1 评论 0原文

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

In the below xml code, I need to get "b1" and "b2" as my output using xslt.

<xml>
    <a>
        <b>
            <b1>b1value</b1>
            <b2>b2value</b2>
        </b>
        <b>
            <b1>b1value2</b1>
            <b2> 2value2</b2>
        </b>
    </a>
</xml>

I wrote the following 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>

But it doesn't give me any output.. why?

Instead if i write

<xsl:for-each select="xml/a/b/*">
 <xsl:value-of select="local-name()"/> 

the output is:

b1
b2
b1
b2

the output i need is:

b1 
b2

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

金兰素衣 2024-11-11 06:43:20

目前尚不清楚您想要获得什么输出。

然而,您没有从 XSLT 获得任何输出的原因是,在您的 for-each 中,您的 xpath 正在寻找 的任何子级,这些子级也具有包含“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>

It's not clear exactly what you're trying to get for output.

However the reason you're not getting any output from your XSLT is that in your for-each, your xpath is looking for any children of <b> that also have a child <b> that contains "b1value".

You need to move your predicate:

  <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>
丢了幸福的猪 2024-11-11 06:43:20

你的意思是这样吗:

<xsl:for-each select="xml/a/b/*[text()='b1value']">

Do you mean this:

<xsl:for-each select="xml/a/b/*[text()='b1value']">
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文