[英]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.