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)!

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
C++ 设计模式与软件架构
C++ 设计模式与软件架构

本专题深入讲解 C++ 中的常见设计模式与架构优化,包括单例模式、工厂模式、观察者模式、策略模式、命令模式等,结合实际案例展示如何在 C++ 项目中应用这些模式提升代码可维护性与扩展性。通过案例分析,帮助开发者掌握 如何运用设计模式构建高质量的软件架构,提升系统的灵活性与可扩展性。

8

2026.01.30

c++ 字符串格式化
c++ 字符串格式化

本专题整合了c++字符串格式化用法、输出技巧、实践等等内容,阅读专题下面的文章了解更多详细内容。

9

2026.01.30

java 字符串格式化
java 字符串格式化

本专题整合了java如何进行字符串格式化相关教程、使用解析、方法详解等等内容。阅读专题下面的文章了解更多详细教程。

8

2026.01.30

python 字符串格式化
python 字符串格式化

本专题整合了python字符串格式化教程、实践、方法、进阶等等相关内容,阅读专题下面的文章了解更多详细操作。

1

2026.01.30

java入门学习合集
java入门学习合集

本专题整合了java入门学习指南、初学者项目实战、入门到精通等等内容,阅读专题下面的文章了解更多详细学习方法。

20

2026.01.29

java配置环境变量教程合集
java配置环境变量教程合集

本专题整合了java配置环境变量设置、步骤、安装jdk、避免冲突等等相关内容,阅读专题下面的文章了解更多详细操作。

17

2026.01.29

java成品学习网站推荐大全
java成品学习网站推荐大全

本专题整合了java成品网站、在线成品网站源码、源码入口等等相关内容,阅读专题下面的文章了解更多详细推荐内容。

19

2026.01.29

Java字符串处理使用教程合集
Java字符串处理使用教程合集

本专题整合了Java字符串截取、处理、使用、实战等等教程内容,阅读专题下面的文章了解详细操作教程。

3

2026.01.29

Java空对象相关教程合集
Java空对象相关教程合集

本专题整合了Java空对象相关教程,阅读专题下面的文章了解更多详细内容。

6

2026.01.29

热门下载

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

精品课程

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

共142课时 | 6万人学习

XQuery 教程
XQuery 教程

共12课时 | 3.8万人学习

XLink  教程
XLink 教程

共7课时 | 1.1万人学习

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

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