XML解析--xPath技术
xPath技术解决了dom4j查询比较深层次结构的节点比较繁琐复杂的问题。主要作用是用于快速获取所需的节点对象。xPath是在dom4j中的,使用时需要导入jaxen-1.1-beta-6.jar。
xPath常用的方法
List<Node> selectNodes("xpath表达式"); 查询多个节点对象
Node selectSingleNode("xpath表达式"); 查询一个节点对象
xPath表达式语法
/ 绝对路径 表示从xml的根位置开始或子元素(一个层次结构)
// 相对路径 表示不分任何层次结构的选择元素。
* 通配符 表示匹配所有元素
[] 条件 表示选择什么条件下的元素
@ 属性 表示选择属性节点
and 关系 表示条件的与关系(等价于&&)
text() 文本 表示选择文本内容
表达式使用说明案例
contact.xml文件
1 <?xml version="1.0" encoding="UTF-8"?> 2 <contactList> 3 <contact id="001"> 4 <name>张三</name> 5 <age>20</age> 6 <mobile>15215413777</mobile> 7 <email>play@126.com</email> 8 <qq>435345345</qq> 9 </contact> 10 <contact id="002"> 11 <name>李四</name> 12 <age>21</age> 13 <mobile>15215413888</mobile> 14 <email>play@126.com</email> 15 <qq>3234234234</qq> 16 </contact> 17 </contactList>
xPath使用案例
1 String xpath = ""; 2 3 /** 4 * 1. / 绝对路径 表示从xml的根位置开始或子元素(一个层次结构) 5 */ 6 xpath = "/contactList"; 7 xpath = "/contactList/contact"; 8 9 /** 10 * 2. // 相对路径 表示不分任何层次结构的选择元素。 11 */ 12 xpath = "//contact/name"; 13 xpath = "//name"; 14 15 /** 16 * 3. * 通配符 表示匹配所有元素 17 */ 18 xpath = "/contactList/*"; //根标签contactList下的所有子标签 19 xpath = "/contactList//*";//根标签contactList下的所有标签(不分层次结构) 20 21 /** 22 * 4. [] 条件 表示选择什么条件下的元素 23 */ 24 //带有id属性的contact标签 25 xpath = "//contact[@id]"; 26 //第二个的contact标签 27 xpath = "//contact[2]"; 28 //选择最后一个contact标签 29 xpath = "//contact[last()]"; 30 31 /** 32 * 5. @ 属性 表示选择属性节点 33 */ 34 xpath = "//@id"; //选择id属性节点对象,返回的是Attribute对象 35 xpath = "//contact[not(@id)]";//选择不包含id属性的contact标签节点 36 xpath = "//contact[@id='002']";//选择id属性值为002的contact标签 37 xpath = "//contact[@id='001' and @name='eric']";//选择id属性值为001,且name属性为eric的contact标签 38 39 /** 40 *6. text() 表示选择文本内容 41 */ 42 //选择name标签下的文本内容,返回Text对象 43 xpath = "//name/text()"; 44 xpath = "//contact/name[text()='张三']";//选择姓名为张三的name标签
代码示例:
删除id属性为002的标签,并删除
1 import java.io.File; 2 import java.io.FileOutputStream; 3 4 5 import org.dom4j.Document; 6 import org.dom4j.DocumentException; 7 import org.dom4j.Element; 8 import org.dom4j.io.OutputFormat; 9 import org.dom4j.io.SAXReader; 10 import org.dom4j.io.XMLWriter; 11 12 public class Dom4jTest { 13 14 public static void main(String[] args) throws Exception{ 15 Document doc = new SAXReader().read(new File("./src/contact.xml")); 16 //使用xPatch查询id为002的记录 17 Element elem = (Element)doc.selectSingleNode("//contact[@id='002']"); 18 System.out.println(elem); 19 elem.detach(); 20 FileOutputStream outputStream = new FileOutputStream(new File("/Users/nick/Desktop/nkcontact.xml")); 21 OutputFormat outputFormat = OutputFormat.createPrettyPrint(); 22 XMLWriter writer = new XMLWriter(outputStream,outputFormat); 23 writer.write(doc); 24 writer.close(); 25 } 26 27 }