使用// leaf获取每个叶子的字符串值

时间:2016-03-09 15:57:45

标签: xml xslt xpath netbeans

这是一棵树:

<tree id="alphabet">
    <root>
        <node id="node1">
            <leaf>A</leaf>
            <leaf>B</leaf>
        </node>
        <node id="node2">
            <leaf>C</leaf>
            <leaf>D</leaf>
        </node>
    </root>
</tree>

这是一个XSLT样式表:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="html"/>
    <xsl:template match="/">
        <xsl:value-of select="//leaf"/>
    </xsl:template>
</xsl:stylesheet>

所有XPath材质都说双斜杠(// leaf)表达式应该选择整个文档中的所有叶元素。 但是,在这种情况下,只有第一个叶子(A)被复制到输出,而不是它的兄弟。 相反,我们应用以下模板:

<xsl:template match="leaf">
        <xsl:value-of select="."/>
        <br/>
    </xsl:template>

正如预期的那样,将所有4个叶元素的内容复制到输出。 这是为什么?

1 个答案:

答案 0 :(得分:2)

您正在使用XSLT / XPath 1.0样式表:

第一种情况下的value-of将所有leaf元素的节点集转换为字符串,此操作仅使用first node

  

通过返回字符串值,将节点集转换为字符串   节点集中的节点,该节点是文档顺序中的第一个节点。如果   node-set为空,返回空字符串。

在第二种情况下,您将value-of应用于每个leaf节点。

但是使用XSLT / XPath 2.0处理器(并在样式表上使用version='2.0'),第一种情况下的value-of将产生输出A B C D