Can someone explain the difference between text() and string()
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
text() selects all text-node children of
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
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:
"23 4 5 "