В приведенном ниже коде XML, мне нужно получить "b1" и "b2" в качестве вывода с помощью xslt - PullRequest
0 голосов
/ 29 апреля 2011

В приведенном ниже XML-коде мне нужно получить "b1" и "b2" в качестве выходных данных с использованием xslt.

<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 ]

1 голос
/ 29 апреля 2011

Непонятно, что именно вы пытаетесь получить для вывода.

Однако причина, по которой вы не получаете никакого вывода из вашего 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>
0 голосов
/ 29 апреля 2011

Вы имеете в виду это:

<xsl:for-each select="xml/a/b/*[text()='b1value']">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...