繁体   English   中英

text()和string()之间的区别

[英]Difference between text() and string()

有人可以解释text()和string()函数之间的区别。 我经常使用其中一个,但它没有任何区别,两者都将获得xml节点的字符串值。

有人可以解释text()和string()函数之间的区别。

I. text()不是函数,而是节点测试

它用于选择上下文节点的所有文本节点子节点。

因此,如果上下文节点是名为x的元素,则text()选择x所有文本节点子节点。

其他例子

/a/b/c/text()

选择任何c元素的所有文本节点子元素,该元素是作为顶部元素a的子元素的任何b元素的子元素。

II。 string()函数

根据定义, string(exprSelectingASingleNode)返回节点的字符串值

元素的字符串值是所有文本节点后代的串联 - 按文档顺序排列。

因此,如果在以下XML文档中

<a>
  <b>2</b>
  <c>3
    <d>4</d>
  </c>
  5
</a>

string(/a)返回(没有周围的引号):

"
  2
  3
    4

  5
"

正如我们所看到的,字符串值反映了三个仅限空格的文本节点,我们通常无法注意到这些节点。

一些XML解析器可以选择剥离仅限空白的文本节点。 如果上面的文档是使用剥离的仅空白文本节点解析的,那么相同的函数:

string(/a)

现在返回:

"23
    4
  5
"

大多数情况下,如果您想要元素节点X的内容,您可以将其称为“。”,如果它是上下文节点,或者如果它是上下文节点的子节点则称为“X”。 例如:

<xsl:if test="X = 'abcd'">...

要么

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

在这两种情况下,由于上下文需要字符串,因此会自动应用string()函数。 (这是一个小小的简化,如果你正在运行模式感知的XSLT 2.0,规则会稍微复杂一些)。

这里使用“ string() ”是不必要的,因为它是自动完成的; 并且使用text()是一个错误(一个似乎越来越普遍的错误,受到网络上一些不好的教程的鼓励)。 在这种情况下使用./text()X/text()会为您提供元素的所有文本节点子节点。 元素通常有一个文本节点子节点,其字符串值恰好与元素的字符串值相同,但如果有人添加注释或处理指令,则代码会失败,因为该值会被分割为多个文本节点。 如果元素是一个(例如“ title ”)允许混合内容,它也会失败: string(title)title/text()将给出相同的答案,直到您点击带有标题的文章

<title>On the wetness of H<sub>2</sub>O</title>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM