#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']">