这是一棵树:
<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 )表达式应该选择整个文档中的所有叶子元素。然而,在这种情况下,只有第一个叶(A)被复制到输出,而不是它的同级。当我们应用以下模板时:
<xsl:template match="leaf">
<xsl:value-of select="."/>
<br/>
</xsl:template>正如预期的那样,所有4个叶元素的内容都被复制到输出中。为什么会这样呢?
发布于 2016-03-10 00:01:13
您正在使用XSLT/XPath 1.0样式表:
第一种情况下的value-of将所有leaf元素的节点集转换为字符串,此操作仅使用first node
通过返回节点集中按文档顺序排在第一位的节点的字符串值,将节点集转换为字符串。如果node-set为空,则返回空字符串。
在第二种情况下,您将对每个leaf节点应用value-of。
但是,如果使用XSLT/XPath2.0处理程序(并在样式表上使用version='2.0' ),第一种情况下的value-of将生成输出A B C D。
https://stackoverflow.com/questions/35896469
复制相似问题