Can someone explain the difference between text() and string()
functions.
I. text()
isn't a function but a node test.
It is used to select all text-node children of the context node.
So, if the context node is an element named x
, then text()
selects all text-node children of x
.
Other examples:
/a/b/c/text()
selects all text-node children of any c
element that is a child of any b
element that is a child of the top element a
.
II. The string()
function
By definition string(exprSelectingASingleNode)
returns the string value of the node.
The string value of an element is the concatenation of all of its text-node descendents -- in document order.
Therefore, if in the following XML document:
<a>
<b>2</b>
<c>3
<d>4</d>
</c>
5
</a>
string(/a)
returns (without the surrounding quotes):
"
2
3
4
5
"
As we see, the string value reflects three white-space-only text-nodes, which we typically fail to notice and account for.
Some XML parsers have the option of stripping-off white-space-only text nodes. If the above document was parsed with the white-space-only text nodes stripped off, then the same function:
string(/a)
now returns:
"23
4
5
"
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…