十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
这篇文章主要为大家展示了“XML中XPATH语法的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“XML中XPATH语法的示例分析”这篇文章吧。
专注于为中小企业提供成都网站建设、网站设计服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业晋源免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了上千家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。
为什么需要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
为什么需要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语法的示例分析”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联行业资讯频道!