实用dom4j操作xpath
来源:互联网 发布:手机淘宝如何换账号 编辑:程序博客网 时间:2024/06/14 04:05
xpath是啥
w3school的介绍:
XPath 是一门在 XML 文档中查找信息的语言。XPath 可用来在 XML 文档中对元素和属性进行遍历。 XPath 是 W3C
XSLT 标准的主要元素,并且 XQuery 和 XPointer 都构建于 XPath 表达之上。 因此,对 XPath 的理解是很多高级
XML 应用的基础。
我的理解为xpath就是每个标签节点的路径。
xpath的七种节点类型:
元素、属性、文本、命名空间、处理指令、注释以及文档节点(或称为根节点)
节点的关系:
父、子、同胞、先辈、后代
节点的选取:
基础选取
1、 节点名: 选取此节点的所有子节点。
2、 /节点名: 从根节点选取。
3、 // 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
4、 . 选取当前节点。
5、 .. 选取当前节点的父节点。
6、 @ 选取属性。
举例:
<?xml version="1.0" encoding="UTF-8"?> <book> <西游记 id="x001"> <作者>吴承恩1</作者> <作者>吴承恩2</作者> <朝代>明朝</朝代> </西游记> <红楼梦 id="x002"> <作者>曹雪芹</作者> </红楼梦> </book>
1、 book:选取book下的所有节点;
2、 /book:选取根节点book;
3、 /book/西游记:选取节点book下的所有西游记节点;
4、 //book:选取所有的book下的子节点,不论这个子节点在哪儿,比如可以选到上面的西游记节点,以及西游记下的作者节点;
5、 /book//作者:选取book下的所有作者元素,不论在这个作者元素在哪儿;
6、 //@id:选取名为id的所有属性
高级选取
我们直接看例子:
<?xml version="1.0" encoding="UTF-8"?> <books> <book id="x001"> <作者>吴承恩1</作者> <作者>吴承恩2</作者> <朝代>明朝</朝代> <price>56.00</price> </book> <book id="x002"> <作者>曹雪芹</作者> <price>33.00</price> </book> </books>
1、 /books/book[1] 选取属于 books 子节点的第一个 book 元素。
2、 /books/book[last()] 选取属于 books 子节点的最后一个 book 元素。
3、 /books/book[last()-1] 选取属于 books 子节点的倒数第二个 book 元素。
4、 /books/book[position()<3] 选取最前面的两个属于 books 元素的子节点素的 book 元素。
5、 //book[@id] 选取所有拥有名为id 属性的 book元素。
6、 //title[@id=’x001’] 选取所有 book 元素,且这些元素拥有值为x001 的 id 属性。
7、 /books/book[price>35.00] 选取 books元素的所有 book 元素,且其中的 price 元素的值须大于 35.00。
8、 /books/book[price>35.00]/作者 选取 bookstore 元素中的 book 元素的所有 作者 元素,且其中的 price 元素的值须大于 35.00。
9、 通过竖线按多个条件选取,比如:
//book/作者 | //book/price:选取 book 元素的所有 作者 和 price 元素。
xpath的轴选取:
1、 ancestor:选取当前节点的所有先辈(父、祖父等)
2、 ancestor-or-self:选取当前节点的所有先辈(父、祖父等)以及当前节点本身
3、 attribute:选取当前节点的所有属性
4、 child:选取当前节点的所有子元素。
5、 descendant:选取当前节点的所有后代元素(子、孙等)。
6、 descendant-or-self:选取当前节点的所有后代元素(子、孙等)以及当前节点本身。
7、 following:选取文档中当前节点的结束标签之后的所有节点。
8、 namespace:选取当前节点的所有命名空间节点
9、 parent:选取当前节点的父节点。
10、 preceding:选取文档中当前节点的开始标签之前的所有节点。
11、 preceding-sibling:选取当前节点之前的所有同级节点。
12、 self:选取当前节点。
例子:
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 。
dom4j使用xpath
1、引入名为jaxen的jar包
2、我们看一下dom4j的xpath格式,选中一个节点后,通过node.getPath()获取这个节点的xpath,发现是这样的:
/[name()=’book’]/[name()=’chapter’]/*[name()=’section’]
既然dom4j要求这种格式,我们在通过xpath操作节点时就用这种格式好了,
比如:
String xpathCase="/*[name()='book']/*[name()='chapter'][3]/*[name()='section']";List<Element> nodes= node.selectNodes(xpathCase);
即可选到book节点下的第三个chapter节点的所有section节点,有木有很方便!
xml仍然是数据表示的优秀格式,很多json无法取代的地方,甚至也作为nosql的存储格式,值的我们好好学习!
- 实用dom4j操作xpath
- dom4j xpath 操作 xml 乱码
- dom4j操作节点(XPath 语法)
- 使用dom4j操作Xpath的操作
- DOM4J中通过XPath操作DOM节点
- XML:Dom4j操作XML的CRUD、XPath
- Dom4J+XPath
- DOM4J+Xpath
- Dom4j 、 XPath
- dom4j xpath
- Dom4j 操作, 节点查找 添加 删除 修改 。。。xPath
- dom4j+xpath例子
- Dom4j读文件---XPath
- DOM4J+XPath 解析XML
- dom4j+xpath应用
- Dom4j和Xpath
- dom4j的XPATH语法
- Dom4J 和Xpath
- 8051微型实时抢先多任务内核——Timic51
- C# ~ 泛型委托
- 【HDU4803】Poor Warehouse Keeper(贪心 + 模拟)
- mjpg-streamer学习笔记4----主进程--关键函数详解
- SSH整合笔记
- 实用dom4j操作xpath
- leetcode Decode Ways
- php微信接口开发的数据获取和自动回复
- $.each,对象显示姓名加,,,
- 常用正则表达式大全
- angularjs的作用域(ng-repeat 和 ng-controller)
- _REQUEST、$_POST、$_GET
- 修改Android签名证书keystore的密码、别名alias以及别名密码
- 数据结构二叉树个人总结