我有这个(令牌)XML 文件,我只想打印“打印这个”字符串,忽略以下内容:
<tag1>
Print this
<tag2>
Do not print this
</tag2>
</tag1>
在我的 XSL 文件中,使用这个命令我得到了打印的内容tag1
和内容:tag2
<xsl:value-of select="tag1"/>
谢谢!
value-of
元素的值将为您提供它的文本节点及其后代的值。如果您只想要text()
元素的直接节点,请使用:
<xsl:value-of select="tag1/text()"/>
在我的 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])"/>"
<xsl:value-of select="tag1/text()"/>
将选择下的所有文本节点tag1