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元素的title和price元素。/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,关注后即可获取最新文章推送
看完如果觉得有帮助,欢迎点赞、收藏、关注
XML文档节点导航与选择指南的更多相关文章
- java中XML操作:xml与string互转、读取XML文档节点及对XML节点增删改查
一.XML和String互转: 使用dom4j程式变得很简单 //字符串转XML String xmlStr = \"......\"; Document document = D ...
- Java获取XML节点总结之读取XML文档节点
dom4j是Java的XML API,用来读写XML文件的.目前有很多场景中使用dom4j来读写xml的.要使用dom4j开发,需要下载导入dom4j相应的jar文件.官网下载:http://www. ...
- solr schema.xml文档节点配置
首先,讲解一下/usr/local/solr/collection1/conf/schema.xml的配置,此文档功能类似于配置索引数据库. Field:类似于数据库字段的属性(此文统一使用用“字段” ...
- XMLHelper类 源码(XML文档帮助类,静态方法,实现对XML文档的创建,及节点和属性的增、删、改、查)
以下是代码: using System; using System.Collections.Generic; using System.Linq; using System.Web; using Sy ...
- XPath操作XML文档
NET框架下的Sytem.Xml.XPath命名空间提供了一系列的类,允许应用XPath数据模式查询和展示XML文档数据. 3.1XPath介绍 主要的目的是在xml1.0和1.1文档节点树种定位节点 ...
- dom4j解析xml文档全面介绍
一.dom4j介绍 dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个非常非常优秀的Java XML API,具有性能优异.功能强大和极端易用使用的特点, ...
- DOM和SAX是应用中操纵XML文档的差别
查看原文:http://www.ibloger.net/article/205.html DOM和SAX是应用中操纵XML文档的两种主要API.它们分别解释例如以下: DOM.即Do ...
- 使用JAXP对XML文档进行DOM解析
import java.io.FileOutputStream; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers. ...
- 2.1 使用JAXP 对 xml文档进行DOM解析
//使用 jaxp 对xml文档进行dom解析 public class Demo2 { //必要步骤 @Test public void test() throws Exception { //1. ...
- C#XmlHelper帮助类操作Xml文档的通用方法汇总
前言 该篇文章主要总结的是自己平时工作中使用频率比较高的Xml文档操作的一些常用方法和收集网上写的比较好的一些通用Xml文档操作的方法(主要包括Xml序列化和反序列化,Xml文件读取,Xml文档节点内 ...
随机推荐
- GPS坐标系转换 go golang 版本
GPS坐标系转换 坐标系 解释 WGS84坐标系 地球坐标系,国际通用坐标系 GCJ02坐标系 火星坐标系,WGS84坐标系加密后的坐标系:Google国内地图.高德.腾讯地图 使用 BD09坐标系 ...
- Vue.beforeEach is not a function报错
使用导航守卫改变页面的title时报错了,明明在beaforeEach的参数中写了箭头函数也报下面的错误 后面发现我的问题在于直接导出了export.default new Router({--})中 ...
- 【Azure APIM】APIM Self-Hosted网关中,添加网关日志以记录请求头信息(Request Header / Response Header)
问题描述 在APIM Gateway 日志中, 对于发送到APIM Host的请求,只记录了一些常规的URL, Status, Time, IP等信息.关于请求Header, Body中的信息,因为隐 ...
- 【Azure 应用服务】[App Service For Linux(Function) ] Python ModuleNotFoundError: No module named 'MySQLdb'
问题描述 在使用Azure Function创建新的Python Function时,使用MySQLdb连接数据库时候出现 ModuleNotFoundError: No module named ' ...
- ElasticSearch基础介绍(1)
## 1. Elasticsearch基本介绍 官网:https://www.elastic.co/cn Elasticsearch(简称ES)是一个基于Apache Lucene(TM)的开源搜索引 ...
- Java 小案例+super使用
1 package com.bytezero.supertest3; 2 3 /** 4 * 5 * @Description AccountTest类 6 * @author Bytezero·zh ...
- Openssl命令详解 - 证书篇
生成自签证书 # 设置CA证书subject CA_SUBJ="/C=CN/ST=ShanDong/L=JiNan/O=sec/OU=sec/CN=www.hxy.com/emailAddr ...
- snipaste 截屏工具快捷键 alt + A 还有 Ctrl + Shift + A
snipaste 截屏工具快捷键 alt + A 还有 Ctrl + Shift + A 因为有时候 alt 会取消右键等菜单
- 基于Apollo3-Blue-MCU的智能手表方案源码解析
一 方案简介 1.简介 Apollo3 Blue Wireless SoC是一款超低功耗无线mcu芯片,它的运行功耗降至6μA/ MHz以下.该器件采用ARM Cortex M4F内核,运行频率高达9 ...
- 已安装docker-compose,安装harbor时还是提示docker-compose未安装或者Permission denied的解决方案
安装Harbor时,下载安装了docker-compose并赋予权限 sudo curl -L "https://github.com/docker/compose/releases/dow ...