使用 dom4j 处理 xml (下)
Posted home-artchy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用 dom4j 处理 xml (下)相关的知识,希望对你有一定的参考价值。
记录一些 xpath 的常规用法,备忘。
1 //3、XPath 了解(用于在xml中选取元素,类似 jquery 选择器) 2 //3.1 路径 3 Node node1 = root.selectSingleNode("/person"); 4 System.out.println(node1.asXML()); 5 6 //3.2 “@” 选取节点属性(取属性一般用selectSingleNode) 7 Node node4 = root.selectSingleNode("//person").selectSingleNode("@name"); 8 System.out.println(node4.asXML()); 9 10 //3.3 “[]” 既可以用作过滤,也可以作下标使用 11 List<Node> nodes1 = root.selectNodes("//person[@cls!=‘04‘]"); //从当前路径找node名为person并且cls属性值不是04的节点 12 for(Node tmpNode : nodes1) 13 { 14 System.out.println(tmpNode.asXML()); 15 } 16 //3.4 小结: 17 -------- 路径 ------------------- 18 // "//person" “//”表示从当前节点的位置开始(忽略中间路径),去找后代节点中有无person节点 19 // "//persons//a" 两个 // 20 // "../.." 父节点的父节点 21 // "/person" 从根节点开始找(不忽略中间路径,要一级一级往下找)。。不仅找不到,还影响后续代码的执行。 22 --------- 过滤 和 运算符 ------ 23 // "//person[a]" //从当前路径找, node名为person,并且 含有a子节点 24 // "//person[@id]" //从当前路径找 , node名为person, 并且有id属性 25 // "//person[@age>=24]" = != > >= < <= (但是不支持*=、$=、^=、~=等) 26 // "//person[@age>=24 and @age<30]" 与 27 // "//person[@age>=24][@age<30]" 作用同上 28 // "//person[@age>26 or @age<20]" 或 29 // "//person[not(@age<25)]" 非 30 // "//persons/dog | //persons/person" 返回两个list的并集("//persons/dog and //persons/person"达不到这样的效果) 31 ---------- 下标 ------------ 32 // "//person[2]" 取匹配节点中的第2个节点(下标从1开始) 33 // "//person[last()-1]" 取倒数第二个 34 35 ----------- 通配符 ----------- 36 // "//person/@name" 匹配所有person节点的name 37 // "//persons/person" 匹配persons下的所有person子节点 38 // "//persons/*" 通配符,匹配persons下的所有子节点 ----------- 函数 ----------------- 39 // "/node()" 匹配根节点下的所有节点(包含文本节点和注释节点)(要注意与"/*"区别) 40 // "//dog/text()" 匹配dog节点下的文本 41 // "//child::node()" 从当前位置开始,递归所有后代节点(包含文本节点和注释节点) 42 // "//child::*" 从当前位置开始,递归所有后代节点 43 44 ----------- 有命名空间的 --------------- 45 // "//namespace::*" 输出所有的namespace,有重复! 46 // "//*[local-name()=‘person‘]" 匹配local-name 为person 的节点,如 ??:person 47 // "//mt:person" 带上命名空间就好了 48 // "/cumt:classes/mc:persons/mt:person"
note: 后代节点和子节点 不是一回事,后代节点还包括子节点的子节点的……
以上是关于使用 dom4j 处理 xml (下)的主要内容,如果未能解决你的问题,请参考以下文章