XPath中的text()和string()区别
摘要:在XPath中,经常使⽤text()和string(),⽽我⼀般都是想到哪个⽤哪个,究竟他们之间有什么不同,没有在意过。本质区别
text()是⼀个node test,⽽string()是⼀个函数,data()是⼀个函数且可以保留数据类型。此外,还有点号(.)表⽰当前节点。使⽤要点
XML例⼦:
<book><author>Tom John</author></book>
⽤例举例
text()book/author/text()
string()book/author/string()
data()book/author/data()
.book/author/.
特殊⽤例
XML例⼦:
<book>
<author>Tom <em>John</em> cat</author>
<pricing>
<price>20</price>
<discount>0.8</discount>
</pricing>
</book>
text()
经常在XPath表达式的最后看到text(),它仅仅返回所指元素的⽂本内容。
let $x := book/author/text()
return $x
返回的结果是Tom cat,其中的John不属于author直接的节点内容。
string()
string()函数会得到所指元素的所有节点⽂本内容,这些⽂本讲会被拼接成⼀个字符串。
let $x := book/author/string()
return $x
返回的内容是”Tom John cat”
data()
⼤多数时候,data()函数和string()函数通⽤,⽽且不建议经常使⽤data()函数,有数据表明,该函数会影响XPath的性能。
let $x := book/pricing/string()
return $x
返回的是200.8
let $x := book/pricing/data()
return $x
这样将返回分开的20和0.8,他们的类型并不是字符串⽽是xs:anyAtomicType,于是就可以使⽤数学函数做⼀定操作。
let $x := book/pricing/price/data()
let $y := book/pricing/discount/data()
return $x*$y
⽐如上⾯这个例⼦,就只能使⽤data(),不能使⽤text()或 string(),因为XPath不⽀持字符串做数学运算。
总结
text()不是函数,XML结构的细微变化,可能会使得结果与预期不符,应该尽量少⽤,data()作为特殊⽤途的函数,可能会出现性能问题,如⽆特殊需要尽量不⽤,string()函数可以满⾜⼤部分的需求。text函数什么意思

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。