4

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

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

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

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

谢谢!

4

3 回答 3

3

value-of元素的值将为您提供它的文本节点及其后代的值。如果您只想要text()元素的直接节点,请使用:

<xsl:value-of select="tag1/text()"/>
于 2010-11-25T16:38:41.300 回答
3

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

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

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

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

只生产

“打印这个”字符串

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

/tag1/text()[1]

必须指定[1]仅选择第一个文本节点子节点,否则可能会选择两个文本节点(这仅在 XSLT 2.0 中存在,其中<xsl:value-of>生成属性中指定的所有节点的字符串值select)。

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

字符串值实际上是:

"
   Print this
   "

<xsl:value-of>如果您将引号括起来,这将是准确的输出。

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

"<xsl:value-of select="normalize-space(/tag1/text()[1])"/>"
于 2010-11-25T19:40:09.167 回答
2

<xsl:value-of select="tag1/text()"/>将选择下的所有文本节点tag1

于 2010-11-25T16:38:50.037 回答