0

0

XML—XPATH语法介绍

黄舟

黄舟

发布时间:2017-02-24 15:19:04

|

1663人浏览过

|

来源于php中文网

原创


为什么需要xpath?

在使用dom4j的时候,我们不能跨层获取某一个元素,必须一层一层去获取,这就非常麻烦。
所以为了我们更方便地访问某个节点,我们可以使用xpath技术,它可以让我们非常方便地读取到指定节点。

X-Node企业快速建站1.0.6.0801
X-Node企业快速建站1.0.6.0801

特色介绍: 1、ASP+XML+XSLT开发,代码、界面、样式全分离,可快速开发 2、支持语言包,支持多模板,ASP文件中无任何HTML or 中文 3、无限级分类,无限级菜单,自由排序 4、自定义版头(用于不规则页面) 5、自动查找无用的上传文件与空目录,并有回收站,可删除、还原、永久删除 6、增强的Cache管理,可单独管理单个Cache 7、以内存和XML做为Cache,兼顾性能与消耗 8、

下载
xpath通常结合dom4j配合使用,而且如果要使用xpath,则需要引入一个新的包jaxen-1.1-beta-6.jar

xpath的基础语法有以下几点:

1.基本的xpath语法类似于在一个文件系统中定位文件,如果路径以斜线/开始,那么该路径就表示到一个元素的绝对路径.

(1)/AAA,它表示选择根元素AAA

这里    
    
    
    
    
        
    
    这里

(2)/AAA/CCC,表示选择AAA的所有CCC子元素


    
    这里    
    
    
        
    
    这里

(3)/AAA/DDD/BBB,表示选择AAA的子元素DDD的所有BBB子元素


    
    
    
    
    
        这里    
    

那么怎么在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元素


    这里    
    这里    
        这里    
    
        
            这里            这里        
    

(2)//DDD/BBB,表示所有父元素是DDD的BBB元素


    
    
    
    
        这里    
    
        
            这里            这里        
    

3.星号*表示选择所有由星号之前路径所定位的元素

(1)/AAA/CCC/DDD/*,它表示选择所有路径依附于/AAA/CCC/DDD的元素:


    
        
            
            
            
            
        
    
    
        
            这里            
            这里            
            这里            
            这里        
            
    
    
        
            
                
            
        
    

(2)/*/*/*/BBB,它表示所有的有3个祖先元素的BBB元素


    
        
            这里            
            这里            
            
            
        
    
    
        
            这里            
            这里            
            
            
        
    
    
        这里            
                
            
        
    

(3)//*,它表示选择所有的元素


4.方括号里的表达式可以进一步地指定元素,其中数字表示元素在选择集里的位置,而last()函数则表示选择集中的最后一个元素。特别要注意的是这里的下标是从1开始的,而不是0!
(1)/AAA/BBB[1],它表示选择AAA的第一个BBB子元素


    这个    
    
    

(2)/AAA/BBB[last()],表示选择AAA的最后一个BBB元素


    
    
    
    这个

5.对属性的操作

(1)//@id,选择所有的id属性,注意:是把所有的id属性当做节点返回,而不是返回有id属性的节点。


    返回这里的id属性节点    也返回这里的id属性节点    
    

(2)//BBB[@id],选择所有有id属性的BBB节点


    返回这个BBB节点    也返回这个BBB节点    
    

(3)//BBB[@name],选择所有有name属性的BBB节点


    
    
    返回这个BBB节点    

(4)//BBB[@*],选择所有有属性的BBB节点


    返回这个BBB节点    返回这个BBB节点    返回这个BBB节点    

(5)//BBB[not(@*)],选择所有没有属性的BBB节点


    
    
    
    这个

6.属性的值可以被用来作为选择的准则

(1)//BBB[@id='b1'],选择含有属性id且其值为’b1’的BBB元素


    这个    
    

7.count()函数可以计数所选元素的个数

(1)//*[count(BBB)=2],选择含有2个BBB子元素的元素


    
        
        
        
    
    返回这个元素        
        
    
    
        
        
    

(2)//*[count(*)=2],选择含有2个子元素的元素


    
        
        
        
    
    返回这个元素        
        
    
    也返回这个元素        
        
    

还有很多其他的语法,包括很多函数的应用,用的不多,这里不做介绍


另外,上述介绍的几点语法可以任意组合,比如下述的xml文档:


    
        
            k1
        
        
            k2这个        
    
    
    

假如我们现在要找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

这里    
    
    
    
    
        
    
    这里

(2)/AAA/CCC,表示选择AAA的所有CCC子元素


    
    这里    
    
    
        
    
    这里

(3)/AAA/DDD/BBB,表示选择AAA的子元素DDD的所有BBB子元素


    
    
    
    
    
        这里    
    

那么怎么在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元素


    这里    
    这里    
        这里    
    
        
            这里            这里        
    

(2)//DDD/BBB,表示所有父元素是DDD的BBB元素


    
    
    
    
        这里    
    
        
            这里            这里        
    

3.星号*表示选择所有由星号之前路径所定位的元素

(1)/AAA/CCC/DDD/*,它表示选择所有路径依附于/AAA/CCC/DDD的元素:


    
        
            
            
            
            
        
    
    
        
            这里            
            这里            
            这里            
            这里        
            
    
    
        
            
                
            
        
    

(2)/*/*/*/BBB,它表示所有的有3个祖先元素的BBB元素


    
        
            这里            
            这里            
            
            
        
    
    
        
            这里            
            这里            
            
            
        
    
    
        这里            
        
                
            
        
    

(3)//*,它表示选择所有的元素


4.方括号里的表达式可以进一步地指定元素,其中数字表示元素在选择集里的位置,而last()函数则表示选择集中的最后一个元素。特别要注意的是这里的下标是从1开始的,而不是0!
(1)/AAA/BBB[1],它表示选择AAA的第一个BBB子元素


    这个    
    
    

(2)/AAA/BBB[last()],表示选择AAA的最后一个BBB元素


    
    
    
    这个

5.对属性的操作

(1)//@id,选择所有的id属性,注意:是把所有的id属性当做节点返回,而不是返回有id属性的节点。


    返回这里的id属性节点    也返回这里的id属性节点    
    

(2)//BBB[@id],选择所有有id属性的BBB节点


    返回这个BBB节点    也返回这个BBB节点    
    

(3)//BBB[@name],选择所有有name属性的BBB节点


    
    
    返回这个BBB节点    

(4)//BBB[@*],选择所有有属性的BBB节点


    返回这个BBB节点    返回这个BBB节点    返回这个BBB节点    

(5)//BBB[not(@*)],选择所有没有属性的BBB节点


    
    
    
    这个

6.属性的值可以被用来作为选择的准则

(1)//BBB[@id='b1'],选择含有属性id且其值为’b1’的BBB元素


    这个    
    

7.count()函数可以计数所选元素的个数

(1)//*[count(BBB)=2],选择含有2个BBB子元素的元素


    
        
        
        
    
    返回这个元素        
        
    
    
        
        
    

(2)//*[count(*)=2],选择含有2个子元素的元素


    
        
        
        
    
    返回这个元素        
        
    
    也返回这个元素        
        
    

还有很多其他的语法,包括很多函数的应用,用的不多,这里不做介绍


另外,上述介绍的几点语法可以任意组合,比如下述的xml文档:


    
        
            k1
        
        
            k2这个        
    
    
    

假如我们现在要找AAA元素下面的第1个BBB子元素下面的第2CCC子元素的KKK子元素,则xpath路径应该这么写:
/AAA/BBB[1]/CCC[2]/KKK

 以上就是XML——XPATH语法介绍 的内容,更多相关内容请关注PHP中文网(www.php.cn)!

相关专题

更多
微信聊天记录删除恢复导出教程汇总
微信聊天记录删除恢复导出教程汇总

本专题整合了微信聊天记录相关教程大全,阅读专题下面的文章了解更多详细内容。

2

2026.01.18

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

74

2026.01.16

全民K歌得高分教程大全
全民K歌得高分教程大全

本专题整合了全民K歌得高分技巧汇总,阅读专题下面的文章了解更多详细内容。

133

2026.01.16

C++ 单元测试与代码质量保障
C++ 单元测试与代码质量保障

本专题系统讲解 C++ 在单元测试与代码质量保障方面的实战方法,包括测试驱动开发理念、Google Test/Google Mock 的使用、测试用例设计、边界条件验证、持续集成中的自动化测试流程,以及常见代码质量问题的发现与修复。通过工程化示例,帮助开发者建立 可测试、可维护、高质量的 C++ 项目体系。

54

2026.01.16

java数据库连接教程大全
java数据库连接教程大全

本专题整合了java数据库连接相关教程,阅读专题下面的文章了解更多详细内容。

39

2026.01.15

Java音频处理教程汇总
Java音频处理教程汇总

本专题整合了java音频处理教程大全,阅读专题下面的文章了解更多详细内容。

19

2026.01.15

windows查看wifi密码教程大全
windows查看wifi密码教程大全

本专题整合了windows查看wifi密码教程大全,阅读专题下面的文章了解更多详细内容。

106

2026.01.15

浏览器缓存清理方法汇总
浏览器缓存清理方法汇总

本专题整合了浏览器缓存清理教程汇总,阅读专题下面的文章了解更多详细内容。

44

2026.01.15

ps图片相关教程汇总
ps图片相关教程汇总

本专题整合了ps图片设置相关教程合集,阅读专题下面的文章了解更多详细内容。

11

2026.01.15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
XML教程
XML教程

共142课时 | 5.7万人学习

XQuery 教程
XQuery 教程

共12课时 | 3.6万人学习

XLink  教程
XLink 教程

共7课时 | 1.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号