最新公告
  • 欢迎您光临立业阁,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入我们
  • 疯狂XML学习笔记(12)————XPath_xml教程


    XPath 是一门在 XML 文档中查找信息的语言。XPath 用于在 XML 文档中通过元素和属性进行导航。

    什么是 XPath?

    • XPath 使用路径表达式在 XML 文档中进行导航

    • XPath 包含一个标准函数库

    • XPath 是 XSLT 中的主要元素

    • XPath 是一个 W3C 标准

    XPath 路径表达式

    XPath 使用路径表达式来选取 XML 文档中的节点或者节点集。这些路径表达式和我们在常规的电脑文件系统中看到的表达式非常相似。

    XPath 标准函数

    XPath 含有超过 100 个内建的函数。这些函数用于字符串值、数值,日期和时间比较、节点和 QName 处理、序列处理、逻辑值等等。

    在 XPath 中,有七种类型的节点:元素、属性、文本、命名空间、处理指令、注释以及文档节点(或成为根节点)。

    XPath 术语

    节点(Node)

    在 XPath 中,有七种类型的节点:元素、属性、文本、命名空间、处理指令、注释以及文档(根)节点。XML 文档是被作为节点树来对待的。树的根被称为文档节点或者根节点。

    请看下面这个 XML 文档:

    <?xml version="1.0" encoding="ISO-8859-1"?>
    
    <bookstore>
    
    <book>
      <title lang="en">Harry Potter</title>
      <author>J K. Rowling</author> 
      <year>2005</year>
      <price>29.99</price>
    </book>
    
    </bookstore>

    上面的XML文档中的节点例子:

    <bookstore> (文档节点)
    <author>J K. Rowling</author> (元素节点)
    lang="en" (属性节点)

    基本值(或称原子值,Atomic value)

    基本值是无父或无子的节点。

    基本值的例子:

    J K. Rowling
    "en"

    项目(Item)

    项目是基本值或者节点。

    节点关系

    父(Parent)

    每个元素以及属性都有一个父。

    在下面的例子中,book 元素是 title、author、year 以及 price 元素的父:

    <book>
      <title>Harry Potter</title>
      <author>J K. Rowling</author>
      <year>2005</year>
      <price>29.99</price>
    </book>

    子(Children)

    元素节点可有零个、一个或多个子。

    在下面的例子中,title、author、year 以及 price 元素都是 book 元素的子:

    <book>
      <title>Harry Potter</title>
      <author>J K. Rowling</author>
      <year>2005</year>
      <price>29.99</price>
    </book>

    同胞(Sibling)

    拥有相同的父的节点

    在下面的例子中,title、author、year 以及 price 元素都是同胞:

    <book>
      <title>Harry Potter</title>
      <author>J K. Rowling</author>
      <year>2005</year>
      <price>29.99</price>
    </book>

    先辈(Ancestor)

    某节点的父、父的父,等等。

    在下面的例子中,title 元素的先辈是 book 元素和 bookstore 元素:

    <bookstore>
    
    <book>
      <title>Harry Potter</title>
      <author>J K. Rowling</author>
      <year>2005</year>
      <price>29.99</price>
    </book>
    
    </bookstore>

    后代(Descendant)

    某个节点的子,子的子,等等。

    在下面的例子中,bookstore的后代是 book、title、author、year 以及 price 元素:

    <bookstore>
    
    <book>
      <title>Harry Potter</title>
      <author>J K. Rowling</author>
      <year>2005</year>
      <price>29.99</price>
    </book>
    
    </bookstore>

    XPath Axes(坐标轴)

    XML 实例文档

    我们将在下面的例子中使用此 XML 文档:

    <?xml version="1.0" encoding="ISO-8859-1"?>
    
    <bookstore>
    
    <book>
      <title lang="eng">Harry Potter</title>
      <price>29.99</price>
    </book>
    
    <book>
      <title lang="eng">Learning XML</title>
      <price>39.95</price>
    </book>
    
    </bookstore>

    XPath 轴

    轴可定义某个相对于当前节点的节点集。

    轴名称 结果
    ancestor 选取当前节点的所有先辈(父、祖父等)
    ancestor-or-self 选取当前节点的所有先辈(父、祖父等)以及当前节点本身
    attribute 选取当前节点的所有属性
    child 选取当前节点的所有子元素。
    descendant 选取当前节点的所有后代元素(子、孙等)。
    descendant-or-self 选取当前节点的所有后代元素(子、孙等)以及当前节点本身。
    following 选取文档中当前节点的结束标签之后的所有节点。
    namespace 选取当前节点的所有命名空间节点
    parent 选取当前节点的父节点。
    preceding 选取文档中当前节点的开始标签之前的所有节点。
    preceding-sibling 选取当前节点之前的所有同级节点。
    self 选取当前节点。

    位置路径表达式

    位置路径可以是绝对的,也可以是相对的。

    绝对路径起始于正斜杠( / ),而相对路径不会这样。在两种情况中,位置路径均包括一个或多个步,每个步均被斜杠分割:

    绝对位置路径:

    /step/step/...

    相对位置路径:

    step/step/...

    每个步均根据当前节点集之中的节点来进行计算。

    步(step)包括:

    • 轴(axis)

    • 定义所选节点与当前节点之间的树关系

    • 节点测试(node-test)

    • 识别某个轴内部的节点

    • 零个或者更多谓语(predicate)

    • 更深入地提炼所选的节点集

    步的语法:

    轴名称::节点测试[谓语]

    实例

    例子 结果
    child::book 选取所有属于当前节点的子元素的 book 节点
    attribute::lang 选取当前节点的 lang 属性
    child::* 选取当前节点的所有子元素
    attribute::* 选取当前节点的所有属性
    child::text() 选取当前节点的所有文本子节点
    child::node() 选取当前节点的所有子节点
    descendant::book 选取当前节点的所有 book 后代
    ancestor::book 选择当前节点的所有 book 先辈
    ancestor-or-self::book 选取当前节点的所有book先辈以及当前节点(假如此节点是book节点的话)
    child::*/child::price 选取当前节点的所有 price 孙。

    XPath 运算符

    XPath 表达式可返回节点集、字符串、逻辑值以及数字。

    XPath 运算符

    下面列出了可用在 XPath 表达式中的运算符:

    运算符 描述 实例 返回值
    | 计算两个节点集 //book | //cd 返回所有带有 book 和 cd 元素的节点集
    + 加法 6 + 4 10
    减法 6 – 4 2
    * 乘法 6 * 4 24
    p 除法 8 p 4 2
    = 等于 price=9.80

    如果 price 是 9.80,则返回 true。

    如果 price 是 9.90,则返回 fasle。

    != 不等于 price!=9.80

    如果 price 是 9.90,则返回 true。

    如果 price 是 9.80,则返回 fasle。

    < 小于 price<9.80

    如果 price 是 9.00,则返回 true。

    如果 price 是 9.90,则返回 fasle。

    <= 小于或等于 price<=9.80

    如果 price 是 9.00,则返回 true。

    如果 price 是 9.90,则返回 fasle。

    > 大于 price>9.80

    如果 price 是 9.90,则返回 true。

    如果 price 是 9.80,则返回 fasle。

    >= 大于或等于 price>=9.80

    如果 price 是 9.90,则返回 true。

    如果 price 是 9.70,则返回 fasle。

    or price=9.80 or price=9.70

    如果 price 是 9.80,则返回 true。

    如果 price 是 9.50,则返回 fasle。

    and price>9.00 and price<9.90

    如果 price 是 9.80,则返回 true。

    如果 price 是 8.50,则返回 fasle。

    mod 计算除法的余数 5 mod 2 1

    XML实例文档

    我们将在下面的例子中使用这个 XML 文档:

    "books.xml" :

    <?xml version="1.0" encoding="ISO-8859-1"?>
    
    <bookstore>
    
    <book category="COOKING">
      <title lang="en">Everyday Italian</title>
      <author>Giada De Laurentiis</author>
      <year>2005</year>
      <price>30.00</price>
    </book>
    
    <book category="CHILDREN">
      <title lang="en">Harry Potter</title>
      <author>J K. Rowling</author>
      <year>2005</year>
      <price>29.99</price>
    </book>
    
    <book category="WEB">
      <title lang="en">XQuery Kick Start</title>
      <author>James McGovern</author>
      <author>Per Bothner</author>
      <author>Kurt Cagle</author>
      <author>James Linn</author>
      <author>Vaidyanathan Nagarajan</author>
      <year>2003</year>
      <price>49.99</price>
    </book>
    
    <book category="WEB">
      <title lang="en">Learning XML</title>
      <author>Erik T. Ray</author>
      <year>2003</year>
      <price>39.95</price>
    </book>
    
    </bookstore>

    节点选取

    我们将使用微软的 XML DOM 对象来载入 XML 文档,并使用 selectNodes() 函数从 XML 文档选取节点:

    set xmlDoc=CreateObject("Microsoft.XMLDOM")
    xmlDoc.async="false"
    xmlDoc.load("books.xml")
    
    xmlDoc.selectNodes(路径表达式)

    选取所有的 book 节点

    下面的这个例子选取了 bookstore 元素下所有的 book 节点:

    xmlDoc.selectNodes("/bookstore/book")

    选取第一个 book 节点

    下面的例子仅选取 bookstore 元素下第一个 book 节点:

    xmlDoc.selectNodes("/bookstore/book[0]")

    选取 price

    下面的例子从所有的 price 节点选取文本:

    xmlDoc.selectNodes("/bookstore/book/price/text()")

    选取价格高于 35 的 price 价格

    下面的例子会选取所有价格高于 35 的 price 节点:

    xmlDoc.selectNodes("/bookstore/book[price>35]/price")

    选取价格高于 35 的 title 节点

    下面的例子会选取所有价格高于 35 的 title 节点:

    xmlDoc.selectNodes("/bookstore/book[price>35]/title")

    以上就是疯狂XML学习笔记(12)————XPath的内容,更多相关内容请关注liyege(www.liyege.cn)!

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    • 1165会员总数(位)
    • 111858资源总数(个)
    • 8本周发布(个)
    • 0 今日发布(个)
    • 243稳定运行(天)

    提供最优质的资源集合

    立即查看 了解详情
    冀ICP备19022365号-1 百度地图

    [email protected]

    立业阁(www.liyege.cn)免费提供wordpress主题模板、dedecms模板、帝国cms模板、小说网站源码、电影网站源码以及网络技术分享,建站源码,小说模板,电影模板,网赚教程,VPS推荐