写点什么

XML 文档节点导航与选择指南

作者:小万哥
  • 2024-04-08
    广东
  • 本文字数:2610 字

    阅读完需:约 9 分钟

XML文档节点导航与选择指南

XPath(XML Path Language)是 XSLT 标准的主要组成部分。它用于在 XML 文档中浏览元素和属性,提供了一种强大的定位和选择节点的方式。

XPath 的基本特点


  • 代表 XML 路径语言: XPath 是一种用于在 XML 文档中导航和选择节点的语言。

  • 路径样式语法: XPath 使用路径表达式的“路径样式”语法来标识和导航 XML 文档中的节点。

  • 包含 200 多个内置函数: XPath 包含 200 多个内置函数,可用于处理字符串、数值、布尔值、日期和时间等。

  • XSLT 的主要组成部分: XPath 是 XSLT(可扩展样式表语言转换)标准的主要组成部分,用于在 XML 文档中选择和操作数据

XPath 路径表达式

XPath 使用路径表达式来选择 XML 文档中的节点或节点集。这些路径表达式类似于在传统计算机文件系统中使用的路径表达式。


例如,/bookstore/book/title 是一个 XPath 路径表达式,表示选择根元素是bookstore的子元素book的子元素title

XPath 标准函数

XPath 包括 200 多个内置函数,用于处理不同类型的数据。这些函数涵盖了字符串值、数值、布尔值、日期和时间比较、节点操作、序列操作等。


XPath 表达式也可以在多种编程语言中使用,如 JavaScript、Java、XML Schema、PHP、Python、C 和 C++等。

XPath 用于 XSLT

XPath 是 XSLT 标准的主要组成部分,它与 XSLT 一起用于对 XML 文档进行转换和样式处理。具有 XPath 知识可以充分发挥 XSLT 的强大功能

XPath 节点

在 XPath 中,有七种节点:元素、属性、文本、命名空间、处理指令、注释和根节点。XML 文档被视为节点树,树的最顶层元素称为根元素。

XPath 术语

  • 节点(Node): 在 XPath 中,有七种节点,包括元素、属性、文本、命名空间、处理指令、注释和根节点。XML 文档被视为节点树,树的最顶层元素称为根元素。

  • 原子值(Atomic Value): 原子值是没有子节点或父节点的节点。例如,字符串或数字。

  • 项目(Item): 项目可以是原子值或节点。

节点之间的关系

在 XPath 中,节点之间有不同的关系:


  • 父节点(Parent Node): 每个元素和属性都有一个父节点。

  • 子节点(Child Node): 元素节点可以有零、一个或多个子节点。

  • 同级节点(Sibling Node): 具有相同父节点的节点。

  • 祖先节点(Ancestor Node): 节点的父节点、父节点的父节点等。

  • 后代节点(Descendant Node): 节点的子节点、子节点的子节点等。

XPath 语法

XPath 使用路径表达式在 XML 文档中选择节点。以下是一些常用的 XPath 路径表达式:


  • nodename:选择所有名称为 "nodename" 的节点。

  • /:从根节点选择。

  • //:选择文档中与选择匹配的当前节点的位置无关的节点。

  • .:选择当前节点。

  • ..:选择当前节点的父节点。

  • @:选择属性。


XPath 示例文档


以下是我们将在下面的示例中使用的 XML 文档:


<?xml version="1.0" encoding="UTF-8"?><bookstore>  <book>    <title lang="en">Harry Potter</title>    <price>29.99</price>  </book>  <book>    <title lang="en">Learning XML</title>    <price>39.95</price>  </book></bookstore>
复制代码


选择节点示例


以下是一些 XPath 路径表达式的示例及其结果:


  • /bookstore:选择所有名称为 "bookstore" 的节点。

  • /bookstore/book:选择根元素 bookstore 的子元素 book

  • //title[@lang='en']:选择所有具有值为 "en" 的 "lang" 属性的 title 元素。

选择未知节点

XPath 通配符可用于选择未知的 XML 节点:


  • *:匹配任何元素节点。

  • @*:匹配任何属性节点。

  • node():匹配任何类型的节点。


例如,/bookstore/* 选择 bookstore 元素的所有子元素节点。

选择多个路径

通过在 XPath 表达式中使用 | 运算符,您可以选择多个路径:


  • //book/title | //book/price:选择所有 book 元素的 titleprice 元素。

  • /bookstore/book/title | //price:选择 bookstore 元素的 book 元素的 title 元素 和 文档中的所有 price 元素。

XPath Axes(轴)

XML 示例文档


以下是我们将在下面的示例中使用的 XML 文档:


<?xml version="1.0" encoding="UTF-8"?><bookstore>  <book>    <title lang="en">Harry Potter</title>    <price>29.99</price>  </book>  <book>    <title lang="en">Learning XML</title>    <price>39.95</price>  </book></bookstore>
复制代码

XPath 轴

在 XPath 中,轴表示与上下文(当前)节点的关系,并用于在树上相对于该节点定位其他节点。以下是常用的 XPath 轴及其描述:


  • ancestor: 选择当前节点的所有祖先(父、祖父等)。

  • ancestor-or-self: 选择当前节点的所有祖先(父、祖父等)以及当前节点本身。

  • attribute: 选择当前节点的所有属性。

  • child: 选择当前节点的所有子节点。

  • descendant: 选择当前节点的所有后代(子、孙等)。

  • descendant-or-self: 选择当前节点的所有后代(子、孙等)以及当前节点本身。

  • following: 选择当前节点结束标签之后的文档中的所有内容。

  • following-sibling: 选择当前节点之后的所有同级节点。

  • namespace: 选择当前节点的所有命名空间节点。

  • parent: 选择当前节点的父节点。

  • preceding: 选择文档中在当前节点之前出现的所有节点,但不包括祖先、属性节点和命名空间节点。

  • preceding-sibling: 选择当前节点之前的所有同级节点。

  • self: 选择当前节点。

位置路径表达式

位置路径可以是绝对的或相对的。绝对位置路径以斜杠(/)开头,而相对位置路径则不是。位置路径由一个或多个步骤组成,每个步骤之间用斜杠分隔。


以下是一些 XPath 位置路径表达式的示例及其结果:


  • /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 表达式中可用的运算符列表:


  • |:计算两个节点集。

  • +:加法。

  • -:减法。

  • *:乘法。

  • div:除法。

  • =:等于。

  • !=:不等于。

  • <:小于。

  • <=:小于或等于。

  • >:大于。

  • >=:大于或等于。

  • or:或。

  • and:与。

  • mod:取模(除法余数)。

最后

为了方便其他设备和平台的小伙伴观看往期文章:


微信公众号搜索:Let us Coding,关注后即可获取最新文章推送


看完如果觉得有帮助,欢迎点赞、收藏、关注

发布于: 刚刚阅读数: 4
用户头像

小万哥

关注

代码如人生 2023-02-09 加入

编程爱好者

评论

发布
暂无评论
XML文档节点导航与选择指南_xml_小万哥_InfoQ写作社区