【问题标题】:How can I get just the first, higher level, string?我怎样才能得到第一个更高级别的字符串?
【发布时间】:2011-05-15 19:31:04
【问题描述】:

我有这个(令牌)XML 文件,我只想打印“打印这个”字符串,忽略以下内容:

<tag1>
   Print this
   <tag2>
      Do not print this
   </tag2>
</tag1>

在我的 XSL 文件中,通过这个命令,我得到了 tag1 的内容和 tag2 的打印内容:

<xsl:value-of select="tag1"/>

谢谢!

【问题讨论】:

标签: xml xslt tags value-of


【解决方案1】:

在我的 XSL 文件中,我使用这个命令 获取 tag1 的内容和 打印tag2的内容:

<xsl:value-of select="tag1"/> 

我怎样才能获得第一个更高的 级别,字符串?

您的代码生成 tag1 元素的字符串值,根据定义,它是该元素的所有文本节点后代的串联。

只生产

“打印这个”字符串

您需要指定一个仅选择相应文本节点的 XPath 表达式

/tag1/text()[1]

指定[1] 是仅选择第一个文本节点子节点所必需的,否则可能会选择两个文本节点(这仅在 XSLT 2.0 中存在,其中&lt;xsl:value-of&gt; 生成在select 属性)。

此外,上面的表达式选择了整个文本节点,其字符串值不是"Print this"

字符串值实际上是:

"
   Print this
   "

如果您将&lt;xsl:value-of&gt; 括在引号中,则会输出。

要准确生成所需的字符串"Print this",请使用

"<xsl:value-of select="normalize-space(/tag1/text()[1])"/>"

【讨论】:

    【解决方案2】:

    value-of 一个元素会给你它的文本节点和它的后代的值。如果您只想要元素的直接text() 节点,请使用:

    <xsl:value-of select="tag1/text()"/>
    

    【讨论】:

      【解决方案3】:

      &lt;xsl:value-of select="tag1/text()"/&gt;会选择tag1下的所有文本节点

      【讨论】:

        猜你喜欢
        • 2016-10-16
        • 2018-05-17
        • 1970-01-01
        • 1970-01-01
        • 2021-03-24
        • 2019-12-29
        • 2015-04-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多