xslt:只选择第一个节点
问题描述:
我想按照一定的顺序从HTML文件写入文本,所以我使用的模板应该按照一定的顺序输出它们的节点内容。 这是XSL:xslt:只选择第一个节点
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="utf-8" omit-xml-declaration="yes" indent="no"/>
<xsl:template match="div[@class='this']">
<xsl:text>B=</xsl:text><xsl:value-of select="div[@class='b']" />
<xsl:text>, A=</xsl:text><xsl:value-of select="div[@class='a']" />
<xsl:text> </xsl:text>
</xsl:template>
</xsl:stylesheet>
这是HTML:
<html>
<body>
<div class="this">
<div>
<div> <!-- This div make the xsl fail -->
<div class="a">Second Class A</div>
<div class="b">Second Class B</div>
</div>
</div>
<div class="this">
<div class="b">First Class B</div>
<div class="a">First Class A</div>
</div>
</body>
</html>
它没有选择,因为额外的div的第一个节点:
B=, A=
B=First Class B, A=First Class A
有什么建议?
问候,彼得
答
你是对的。使用//
从文档的根部开始。该解决方案是简单地删除这一点,表达的是相对于当前的节点
<xsl:template match="div[@class='this']">
<xsl:text>B=</xsl:text><xsl:value-of select="div[@class='b']" />
<xsl:text>, A=</xsl:text><xsl:value-of select="div[@class='a']" />
<xsl:text> </xsl:text>
</xsl:template>
注意,您可以用点领导它。在这种情况下,它看起来像这样:
<xsl:value-of select="./div[@class='b']" />
.//select="div[@class='b']“使它适用于任意数量的标签。 – Peter