maven中使用dom4j解析、生成XML的简易方法

此片文章主要写一些关于如何在maven工程中使用dom4j来解析或生成XML的建议方法,实际可使用的写法不仅限于如下所写的样例代码。此处进攻快速入手和提供思路使用。

 

首先配置pom.xml中的依赖的包

 

[html] view plain copy
 
  1. <dependencies>  
  2.     <dependency>  
  3.         <groupId>dom4j</groupId>  
  4.         <artifactId>dom4j</artifactId>  
  5.         <version>1.6.1</version>  
  6.     </dependency>  
  7.     <dependency>  
  8.         <groupId>junit</groupId>  
  9.         <artifactId>junit</artifactId>  
  10.         <version>4.11</version>  
  11.     </dependency>  
  12.     <dependency>  
  13.         <groupId>jaxen</groupId>  
  14.         <artifactId>jaxen</artifactId>  
  15.         <version>1.1.6</version>  
  16.     </dependency>  
  17. </dependencies>  


上述配置中jaxen的包主要在使用Xpath时会被用到。

 

需要解析的样例XML文件

 

[html] view plain copy
 
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <resources>  
  3.     <product name="QQ">  
  4.         <account id="123456789">  
  5.             <nickname>qq-account-1</nickname>  
  6.             <password>qwe123qwe123</password>  
  7.             <level>56</level>  
  8.         </account>  
  9.         <account id="987654321">  
  10.             <nickname>qq-account-2</nickname>  
  11.             <password>ios9ios9ios9</password>  
  12.             <level>12</level>  
  13.         </account>  
  14.     </product>  
  15.     <product name="Netease">  
  16.         <account id="tom">  
  17.             <password>pwdOfTom</password>  
  18.             <capacity>1024</capacity>  
  19.         </account>  
  20.         <account name="Jim">  
  21.             <password>pwdOfJim</password>  
  22.             <capacity>2560</capacity>  
  23.         </account>  
  24.     </product>  
  25. </resources>  


解析的java类

 

[java] view plain copy
 
  1. package com.jeremy;  
  2.   
  3. import org.dom4j.*;  
  4. import org.dom4j.io.SAXReader;  
  5. import org.dom4j.io.XMLWriter;  
  6. import org.dom4j.xpath.DefaultXPath;  
  7.   
  8. import java.io.IOException;  
  9. import java.io.PrintWriter;  
  10. import java.util.ArrayList;  
  11. import java.util.Iterator;  
  12. import java.util.List;  
  13.   
  14. /** 
  15.  * Created by jeremysong on 1/7/2016. 
  16.  */  
  17. public class DomParser  
  18. {  
  19.     public static List<String> parseMethod1() throws DocumentException  
  20.     {  
  21.         List<String> result = new ArrayList<String>();  
  22.   
  23.         SAXReader reader = new SAXReader();  
  24.         Document document = reader.read("E:\\IdeaProjects\\Example\\NetApp\\src\\main\\resources\\target.xml");  
  25.         XPath xPath = new DefaultXPath("/resources/product[@name='QQ']/account[@id='987654321']/password");  
  26.         List<Element> list = xPath.selectNodes(document.getRootElement());  
  27.         for (Element element : list)  
  28.         {  
  29.             System.out.println(element.getTextTrim());  
  30.             result.add(element.getTextTrim());  
  31.         }  
  32.         return result;  
  33.     }  
  34.   
  35.     public static List<String> parseMethod2() throws DocumentException  
  36.     {  
  37.         List<String> result = new ArrayList<String>();  
  38.   
  39.         SAXReader reader = new SAXReader();  
  40.         Document document = reader.read("E:\\IdeaProjects\\Example\\NetApp\\src\\main\\resources\\target.xml");  
  41.         List<Element> products = document.getRootElement().selectNodes("/resources/product");  
  42.         Iterator iterator = products.iterator();  
  43.         while (iterator.hasNext())  
  44.         {  
  45.             Element product = (Element) iterator.next();  
  46.             String name = product.attributeValue("name");  
  47.             System.out.println(name);  
  48.         }  
  49.         return result;  
  50.     }  
  51.   
  52.     public static void generate()  
  53.     {  
  54.         Document doc = DocumentHelper.createDocument();  
  55.         Element root = doc.addElement("resources");  
  56.   
  57.         Element product = root.addElement("product");  
  58.         product.addAttribute("name", "QQ");  
  59.   
  60.         Element account = product.addElement("account");  
  61.         account.addAttribute("id", "123456789");  
  62.   
  63.         Element nickname = account.addElement("nickname");  
  64.         nickname.setText("QQ-account-1");  
  65.   
  66.         Element password = account.addElement("password");  
  67.         password.setText("123asd21qda");  
  68.   
  69.         Element level = account.addElement("level");  
  70.         level.setText("56");  
  71.   
  72.         PrintWriter pWriter = null;  
  73.         XMLWriter xWriter = null;  
  74.         try  
  75.         {  
  76.             pWriter = new PrintWriter("E:\\IdeaProjects\\Example\\NetApp\\src\\main\\generate.xml");  
  77.             xWriter = new XMLWriter(pWriter);  
  78.             xWriter.write(doc);  
  79.         } catch (Exception e)  
  80.         {  
  81.             e.printStackTrace();  
  82.         } finally  
  83.         {  
  84.             try  
  85.             {  
  86.                 xWriter.flush();  
  87.                 xWriter.close();  
  88.             } catch (IOException e)  
  89.             {  
  90.                 e.printStackTrace();  
  91.             }  
  92.         }  
  93.     }  
  94. }  

 

测试类:

 

[java] view plain copy
 
  1. import com.jeremy.DomParser;  
  2. import org.dom4j.DocumentException;  
  3. import org.junit.Test;  
  4.   
  5. /** 
  6.  * Created by jeremysong on 1/7/2016. 
  7.  */  
  8. public class TestDomParser  
  9. {  
  10.     @Test  
  11.     public void testParseMethod1() throws DocumentException  
  12.     {  
  13.         DomParser.parseMethod1();  
  14.     }  
  15.   
  16.     @Test  
  17.     public void testParseMethod2() throws DocumentException  
  18.     {  
  19.         DomParser.parseMethod2();  
  20.     }  
  21.   
  22.     @Test  
  23.     public void testGenerate()  
  24.     {  
  25.         DomParser.generate();  
  26.     }  
  27. }  


测试结果:

testParseMethod1运行结果



testParseMethod2运行结果

 

testGenerate运行结果

 

[html] view plain copy
 
    1. <?xml version="1.0" encoding="UTF-8"?>  
    2. <resources>  
    3.     <product name="QQ">  
    4.         <account id="123456789">  
    5.             <nickname>QQ-account-1</nickname>  
    6.             <password>123asd21qda</password>  
    7.             <level>56</level>  
    8.         </account>  
    9.     </product>  
    10. </resources>  

 

引用原文:https://blog.csdn.net/jeremysong88/article/details/50479924

 

写博客是为了记住自己容易忘记的东西,另外也是对自己工作的总结,文章可以转载,无需版权。希望尽自己的努力,做到更好,大家一起努力进步!

如果有什么问题,欢迎大家一起探讨,代码如有问题,欢迎各位大神指正!

posted @ 2018-03-22 20:21  緈諨の約錠  阅读(1378)  评论(0编辑  收藏  举报
//用户复制动作发生0.1秒以后再去改粘贴板中的内容。100ms只是一个经常取值,写1000、10、50、200……都行。