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

时间:2010-11-25 16:28:30

标签: xml xslt tags value-of

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

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

在我的XSL文件中,使用此命令,我同时获得了tag1的内容和tag2的内容:

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

谢谢!

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:3)

  

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

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

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

您的代码生成tag1元素的字符串值,根据定义,该元素是元素的所有text-nodes-descendents的串联。

仅制作

  

“打印此”字符串

您需要指定一个只选择相应文本节点的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])"/>"

答案 2 :(得分:2)

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

下的所有文字节点