zoukankan      html  css  js  c++  java
  • Xpath中text(),string(),data()的区别

    摘要: 在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例子:

    1.  
      <book>
    2.  
      <author>Tom <em>John</em> cat</author>
    3.  
      <pricing>
    4.  
      <price>20</price>
    5.  
      <discount>0.8</discount>
    6.  
      </pricing>
    7.  
      </book>

    text()

    经常在XPath表达式的最后看到text(),它仅仅返回所指元素的文本内容。

    1.  
      let $x := book/author/text()
    2.  
      return $x

    返回的结果是Tom cat,其中的John不属于author直接的节点内容。

    string()

    string()函数会得到所指元素的所有节点文本内容,这些文本讲会被拼接成一个字符串。

    1.  
      let $x := book/author/string()
    2.  
      return $x

    返回的内容是”Tom John cat”

    data()

    大多数时候,data()函数和string()函数通用,而且不建议经常使用data()函数,有数据表明,该函数会影响XPath的性能。

    1.  
      let $x := book/pricing/string()
    2.  
      return $x

    返回的是200.8

    1.  
      let $x := book/pricing/data()
    2.  
      return $x

    这样将返回分开的20和0.8,他们的类型并不是字符串而是xs:anyAtomicType,于是就可以使用数学函数做一定操作。

    1.  
      let $x := book/pricing/price/data()
    2.  
      let $y := book/pricing/discount/data()
    3.  
      return $x*$y

    比如上面这个例子,就只能使用data(),不能使用text()或 string(),因为XPath不支持字符串做数学运算。

    总结

    text()不是函数,XML结构的细微变化,可能会使得结果与预期不符,应该尽量少用,data()作为特殊用途的函数,可能会出现性能问题,如无特殊需要尽量不用,string()函数可以满足大部分的需求。

  • 相关阅读:
    libyuv 代码结构分析,借用其NEON/ARM64优化代码
    Android 交叉编译 IPerf3
    Android Change TCP Congestion Control
    Unpack & Repack Android system.img & data.img
    Android can only be built by versions 3.81 and 3.82
    Build Android Kernel && Kernel Module
    换行符
    python之%s、%d、%f的使用
    Python+selenium 实现不定位元素,输入enter键
    进程间通信 (IPC) 方法总结(三)
  • 原文地址:https://www.cnblogs.com/mabingxue/p/11057471.html
Copyright © 2011-2022 走看看