XML—XPATH语法介绍
为什么需要xpath?
在使用dom4j的时候,我们不能跨层获取某一个元素,必须一层一层去获取,这就非常麻烦。
所以为了我们更方便地访问某个节点,我们可以使用xpath技术,它可以让我们非常方便地读取到指定节点。
xpath通常结合dom4j配合使用,而且如果要使用xpath,则需要引入一个新的包jaxen-1.1-beta-6.jar
xpath的基础语法有以下几点:
1.基本的xpath语法类似于在一个文件系统中定位文件,如果路径以斜线/
开始,那么该路径就表示到一个元素的绝对路径.
(1)/AAA
,它表示选择根元素AAA
<AAA>这里 <BBB/> <CCC/> <BBB/> <BBB/> <DDD> <BBB/> <DDD/> <CCC/><AAA/>这里
(2)/AAA/CCC
,表示选择AAA的所有CCC子元素
<AAA> <BBB/> <CCC/>这里 <BBB/> <BBB/> <DDD> <BBB/> <DDD/> <CCC/>这里<AAA/>
(3)/AAA/DDD/BBB
,表示选择AAA的子元素DDD的所有BBB子元素
<AAA> <BBB/> <CCC/> <BBB/> <BBB/> <DDD> <BBB/>这里 <DDD/> <CCC/><AAA/>
那么怎么在dom4j中运用xpath呢?其实很简单:
//1.得到SAXReader解析器SAXReader saxReader = new SAXReader(); //2.指定去解析哪个文件Document document = saxReader.read(new File(path)); //3.可以使用xpath随心读取// document.selectNodes(args)返回多个元素 // document.selectSingleNode(args)返回单个元素List nodes = document.selectNodes("/AAA/BBB");
通过dom4j得到document对象后,可以使用document的selectNodes(args)
方法,这个方法会根据你写的xpath路径返回一个List
,余下的操作就和dom4j类似了。
同时它也有一个selectSingleNode(args)
方法,用于返回一个单个的Node。
下面继续介绍其他的xpath语法:
2.如果路径以双斜线//
开头,则表示文档中所有满足双斜线//
之后规则的元素(无论层级关系)
(1)//BBB
,它表示选择所有BBB元素
<AAA> <BBB/>这里 <CCC/> <BBB/>这里 <DDD> <BBB/>这里 </DDD> <CCC> <DDD> <BBB/>这里 <BBB/>这里 </DDD> </CCC></AAA>
(2)//DDD/BBB
,表示所有父元素是DDD的BBB元素
<AAA> <BBB/> <CCC/> <BBB/> <DDD> <BBB/>这里 </DDD> <CCC> <DDD> <BBB/>这里 <BBB/>这里 </DDD> </CCC></AAA>
3.星号*
表示选择所有由星号之前路径所定位的元素
(1)/AAA/CCC/DDD/*
,它表示选择所有路径依附于/AAA/CCC/DDD的元素:
<AAA> <XXX> <DDD> <BBB/> <BBB/> <EEE/> <FFF/> </DDD> </XXX> <CCC> <DDD> <BBB/>这里 <BBB/>这里 <EEE/>这里 <FFF/>这里 </DDD> </CCC> <CCC> <BBB> <BBB> <BBB/> </BBB> </BBB> </CCC></AAA>
(2)/*/*/*/BBB
,它表示所有的有3个祖先元素的BBB元素
<AAA> <XXX> <DDD> <BBB/>这里 <BBB/>这里 <EEE/> <FFF/> </DDD> </XXX> <CCC> <DDD> <BBB/>这里 <BBB/>这里 <EEE/> <FFF/> </DDD> </CCC> <CCC> <BBB>这里 <BBB> <BBB/> </BBB> </BBB> </CCC></AAA>
(3)//*
,它表示选择所有的元素
4.方括号里的表达式可以进一步地指定元素,其中数字表示元素在选择集里的位置,而last()函数则表示选择集中的最后一个元素。特别要注意的是这里的下标是从1开始的,而不是0!
(1)/AAA/BBB[1]
,它表示选择AAA的第一个BBB子元素
<AAA> <BBB/>这个 <BBB/> <BBB/> <BBB/></AAA>
(2)/AAA/BBB[last()]
,表示选择AAA的最后一个BBB元素
<AAA> <BBB/> <BBB/> <BBB/> <BBB/>这个</AAA>
5.对属性的操作
(1)//@id
,选择所有的id属性,注意:是把所有的id属性当做节点返回,而不是返回有id属性的节点。
<AAA> <BBB id="b1"/>返回这里的id属性节点 <BBB id="b2"/>也返回这里的id属性节点 <BBB name="bbb"/> <BBB/></AAA>
(2)//BBB[@id]
,选择所有有id属性的BBB节点
<AAA> <BBB id="b1"/>返回这个BBB节点 <BBB id="b2"/>也返回这个BBB节点 <BBB name="bbb"/> <BBB/></AAA>
(3)//BBB[@name]
,选择所有有name属性的BBB节点
<AAA> <BBB id="b1"/> <BBB id="b2"/> <BBB name="bbb"/>返回这个BBB节点 <BBB/></AAA>
(4)//BBB[@*]
,选择所有有属性的BBB节点
<AAA> <BBB id="b1"/>返回这个BBB节点 <BBB id="b2"/>返回这个BBB节点 <BBB name="bbb"/>返回这个BBB节点 <BBB/></AAA>
(5)//BBB[not(@*)]
,选择所有没有属性的BBB节点
<AAA> <BBB id="b1"/> <BBB id="b2"/> <BBB name="bbb"/> <BBB/>这个</AAA>
6.属性的值可以被用来作为选择的准则
(1)//BBB[@id='b1']
,选择含有属性id且其值为’b1’的BBB元素
<AAA> <BBB id="b1"/>这个 <BBB name="bbb"/> <BBB name="bbb"/></AAA>
7.count()
函数可以计数所选元素的个数
(1)//*[count(BBB)=2]
,选择含有2个BBB子元素的元素
<AAA> <CCC> <BBB/> <BBB/> <BBB/> </CCC> <DDD>返回这个元素 <BBB/> <BBB/> </DDD> <EEE> <CCC/> <DDD/> </EEE></AAA>
(2)//*[count(*)=2]
,选择含有2个子元素的元素
<AAA> <CCC> <BBB/> <BBB/> <BBB/> </CCC> <DDD>返回这个元素 <BBB/> <BBB/> </DDD> <EEE>也返回这个元素 <CCC/> <DDD/> </EEE></AAA>
还有很多其他的语法,包括很多函数的应用,用的不多,这里不做介绍
另外,上述介绍的几点语法可以任意组合,比如下述的xml文档:
<AAA> <BBB id="b1"> <CCC> <KKK>k1</KKK> </CCC> <CCC> <KKK>k2</KKK>这个 </CCC> </BBB> <BBB id="b2"/> <BBB name="bbb"/></AAA>
假如我们现在要找AAA元素下面的第1个BBB子元素下面的第2CCC子元素的KKK子元素,则xpath路径应该这么写: /AAA/BBB[1]/CCC[2]/KKK
为什么需要xpath?
在使用dom4j的时候,我们不能跨层获取某一个元素,必须一层一层去获取,这就非常麻烦。
所以为了我们更方便地访问某个节点,我们可以使用xpath技术,它可以让我们非常方便地读取到指定节点。
xpath通常结合dom4j配合使用,而且如果要使用xpath,则需要引入一个新的包jaxen-1.1-beta-6.jar
xpath的基础语法有以下几点:
1.基本的xpath语法类似于在一个文件系统中定位文件,如果路径以斜线/
开始,那么该路径就表示到一个元素的绝对路径.
(1)/AAA
,它表示选择根元素AAA
<AAA>这里 <BBB/> <CCC/> <BBB/> <BBB/> <DDD> <BBB/> <DDD/> <CCC/><AAA/>这里
(2)/AAA/CCC
,表示选择AAA的所有CCC子元素
<AAA> <BBB/> <CCC/>这里 <BBB/> <BBB/> <DDD> <BBB/> <DDD/> <CCC/>这里<AAA/>
(3)/AAA/DDD/BBB
,表示选择AAA的子元素DDD的所有BBB子元素
<AAA> <BBB/> <CCC/> <BBB/> <BBB/> <DDD> <BBB/>这里 <DDD/> <CCC/><AAA/>
那么怎么在dom4j中运用xpath呢?其实很简单:
//1.得到SAXReader解析器SAXReader saxReader = new SAXReader(); //2.指定去解析哪个文件Document document = saxReader.read(new File(path)); //3.可以使用xpath随心读取 // document.selectNodes(args)返回多个元素 // document.selectSingleNode(args)返回单个元素List nodes = document.selectNodes("/AAA/BBB");
通过dom4j得到document对象后,可以使用document的selectNodes(args)
方法,这个方法会根据你写的xpath路径返回一个List
,余下的操作就和dom4j类似了。
同时它也有一个selectSingleNode(args)
方法,用于返回一个单个的Node。
下面继续介绍其他的xpath语法:
2.如果路径以双斜线//
开头,则表示文档中所有满足双斜线//
之后规则的元素(无论层级关系)
(1)//BBB
,它表示选择所有BBB元素
<AAA> <BBB/>这里 <CCC/> <BBB/>这里 <DDD> <BBB/>这里 </DDD> <CCC> <DDD> <BBB/>这里 <BBB/>这里 </DDD> </CCC></AAA>
(2)//DDD/BBB
,表示所有父元素是DDD的BBB元素
<AAA> <BBB/> <CCC/> <BBB/> <DDD> <BBB/>这里 </DDD> <CCC> <DDD> <BBB/>这里 <BBB/>这里 </DDD> </CCC></AAA>
3.星号*
表示选择所有由星号之前路径所定位的元素
(1)/AAA/CCC/DDD/*
,它表示选择所有路径依附于/AAA/CCC/DDD的元素:
<AAA> <XXX> <DDD> <BBB/> <BBB/> <EEE/> <FFF/> </DDD> </XXX> <CCC> <DDD> <BBB/>这里 <BBB/>这里 <EEE/>这里 <FFF/>这里 </DDD> </CCC> <CCC> <BBB> <BBB> <BBB/> </BBB> </BBB> </CCC></AAA>
(2)/*/*/*/BBB
,它表示所有的有3个祖先元素的BBB元素
<AAA> <XXX> <DDD> <BBB/>这里 <BBB/>这里 <EEE/> <FFF/> </DDD> </XXX> <CCC> <DDD> <BBB/>这里 <BBB/>这里 <EEE/> <FFF/> </DDD> </CCC> <CCC> <BBB>这里 <BBB> <BBB/> </BBB> </BBB> </CCC></AAA>
(3)//*
,它表示选择所有的元素
4.方括号里的表达式可以进一步地指定元素,其中数字表示元素在选择集里的位置,而last()函数则表示选择集中的最后一个元素。特别要注意的是这里的下标是从1开始的,而不是0!
(1)/AAA/BBB[1]
,它表示选择AAA的第一个BBB子元素
<AAA> <BBB/>这个 <BBB/> <BBB/> <BBB/></AAA>
(2)/AAA/BBB[last()]
,表示选择AAA的最后一个BBB元素
<AAA> <BBB/> <BBB/> <BBB/> <BBB/>这个</AAA>
5.对属性的操作
(1)//@id
,选择所有的id属性,注意:是把所有的id属性当做节点返回,而不是返回有id属性的节点。
<AAA> <BBB id="b1"/>返回这里的id属性节点 <BBB id="b2"/>也返回这里的id属性节点 <BBB name="bbb"/> <BBB/></AAA>
(2)//BBB[@id]
,选择所有有id属性的BBB节点
<AAA> <BBB id="b1"/>返回这个BBB节点 <BBB id="b2"/>也返回这个BBB节点 <BBB name="bbb"/> <BBB/></AAA>
(3)//BBB[@name]
,选择所有有name属性的BBB节点
<AAA> <BBB id="b1"/> <BBB id="b2"/> <BBB name="bbb"/>返回这个BBB节点 <BBB/></AAA>
(4)//BBB[@*]
,选择所有有属性的BBB节点
<AAA> <BBB id="b1"/>返回这个BBB节点 <BBB id="b2"/>返回这个BBB节点 <BBB name="bbb"/>返回这个BBB节点 <BBB/></AAA>
(5)//BBB[not(@*)]
,选择所有没有属性的BBB节点
<AAA> <BBB id="b1"/> <BBB id="b2"/> <BBB name="bbb"/> <BBB/>这个</AAA>
6.属性的值可以被用来作为选择的准则
(1)//BBB[@id='b1']
,选择含有属性id且其值为’b1’的BBB元素
<AAA> <BBB id="b1"/>这个 <BBB name="bbb"/> <BBB name="bbb"/></AAA>
7.count()
函数可以计数所选元素的个数
(1)//*[count(BBB)=2]
,选择含有2个BBB子元素的元素
<AAA> <CCC> <BBB/> <BBB/> <BBB/> </CCC> <DDD>返回这个元素 <BBB/> <BBB/> </DDD> <EEE> <CCC/> <DDD/> </EEE></AAA>
(2)//*[count(*)=2]
,选择含有2个子元素的元素
<AAA> <CCC> <BBB/> <BBB/> <BBB/> </CCC> <DDD>返回这个元素 <BBB/> <BBB/> </DDD> <EEE>也返回这个元素 <CCC/> <DDD/> </EEE></AAA>
还有很多其他的语法,包括很多函数的应用,用的不多,这里不做介绍
另外,上述介绍的几点语法可以任意组合,比如下述的xml文档:
<AAA> <BBB id="b1"> <CCC> <KKK>k1</KKK> </CCC> <CCC> <KKK>k2</KKK>这个 </CCC> </BBB> <BBB id="b2"/> <BBB name="bbb"/></AAA>
假如我们现在要找AAA元素下面的第1个BBB子元素下面的第2CCC子元素的KKK子元素,则xpath路径应该这么写: /AAA/BBB[1]/CCC[2]/KKK
以上就是XML——XPATH语法介绍 的内容,更多相关内容请关注PHP中文网(www.php.cn)!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

XML文件可以用PPT打开吗?XML,即可扩展标记语言(ExtensibleMarkupLanguage),是一种被广泛应用于数据交换和数据存储的通用标记语言。与HTML相比,XML更加灵活,能够定义自己的标签和数据结构,使得数据的存储和交换更加方便和统一。而PPT,即PowerPoint,是微软公司开发的一种用于创建演示文稿的软件。它提供了图文并茂的方

使用Python实现XML数据的合并和去重XML(eXtensibleMarkupLanguage)是一种用于存储和传输数据的标记语言。在处理XML数据时,有时候我们需要将多个XML文件合并成一个,或者去除重复的数据。本文将介绍如何使用Python实现XML数据的合并和去重的方法,并给出相应的代码示例。一、XML数据合并当我们有多个XML文件,需要将其合

Python中的XML数据转换为CSV格式XML(ExtensibleMarkupLanguage)是一种可扩展标记语言,常用于数据的存储和传输。而CSV(CommaSeparatedValues)则是一种以逗号分隔的文本文件格式,常用于数据的导入和导出。在处理数据时,有时需要将XML数据转换为CSV格式以便于分析和处理。Python作为一种功能强大

使用Python实现XML数据的筛选和排序引言:XML是一种常用的数据交换格式,它以标签和属性的形式存储数据。在处理XML数据时,我们经常需要对数据进行筛选和排序。Python提供了许多有用的工具和库来处理XML数据,本文将介绍如何使用Python实现XML数据的筛选和排序。读取XML文件在开始之前,我们需要先读取XML文件。Python有许多XML处理库,

Python实现XML和JSON之间的转换导语:在日常的开发过程中,我们常常需要将数据在不同的格式之间进行转换。XML和JSON是常见的数据交换格式,在Python中,我们可以使用各种库来实现XML和JSON之间的相互转换。本文将介绍几种常用的方法,并附带代码示例。一、XML转JSON在Python中,我们可以使用xml.etree.ElementTree模

使用Python处理XML中的错误和异常XML是一种常用的数据格式,用于存储和表示结构化的数据。当我们使用Python处理XML时,有时可能会遇到一些错误和异常。在本篇文章中,我将介绍如何使用Python来处理XML中的错误和异常,并提供一些示例代码供参考。使用try-except语句捕获XML解析错误当我们使用Python解析XML时,有时候可能会遇到一些

Python解析XML中的特殊字符和转义序列XML(eXtensibleMarkupLanguage)是一种常用的数据交换格式,用于在不同系统之间传输和存储数据。在处理XML文件时,经常会遇到包含特殊字符和转义序列的情况,这可能会导致解析错误或者误解数据。因此,在使用Python解析XML文件时,我们需要了解如何处理这些特殊字符和转义序列。一、特殊字符和

C#开发中如何处理XML和JSON数据格式,需要具体代码示例在现代软件开发中,XML和JSON是广泛应用的两种数据格式。XML(可扩展标记语言)是一种用于存储和传输数据的标记语言,而JSON(JavaScript对象表示)是一种轻量级的数据交换格式。在C#开发中,我们经常需要处理和操作XML和JSON数据,本文将重点介绍如何使用C#处理这两种数据格式,并附上
