В приведенном ниже xml-коде мне нужно получить «b1» и «b2» в качестве выходных данных, используя xslt

#xml #xslt

#xml #xslt

Вопрос:

В приведенном ниже 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
  

Комментарии:

1. Вы пытаетесь получить отдельные имена элементов для всех дочерних b элементов?

2. Это неясный вопрос.

Ответ №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>
  

Ответ №2:

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

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