xslt:仅选择第一个节点

时间:2016-12-15 16:11:09

标签: html xslt

我想从HTML文件中按特定顺序编写文本,因此我使用的模板应按特定顺序输出节点内容。 这是XSL:

<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>&#10;</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

有什么建议吗?

问候,彼得

1 个答案:

答案 0 :(得分:1)

你是对的。使用//从文档的根开始。解决方案是简单地删除它,表达式是相对于当前节点的

    <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>&#10;</xsl:text>
    </xsl:template>

请注意,您可以使用点引导它。在这种情况下,它看起来像这样:

<xsl:value-of select="./div[@class='b']" />