首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用//leaf获取每个叶的字符串值

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

Stack Overflow用户
提问于 2016-03-09 23:57:45
回答 1查看 110关注 0票数 0

这是一棵树:

代码语言:javascript
复制
<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样式表:

代码语言:javascript
复制
<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)被复制到输出,而不是它的同级。当我们应用以下模板时:

代码语言:javascript
复制
<xsl:template match="leaf">
        <xsl:value-of select="."/>
        <br/>
    </xsl:template>

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

EN

回答 1

Stack Overflow用户

发布于 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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35896469

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档