使用dom4j建立和解析xml文件

使用dom4j建立和解析xml文件

  在項目開發中,咱們常常會遇到xml文件的建立和解析從別人接口獲得的xml文件,而咱們最常使用的組件是dom4j。java

下面我就以代碼來說解一下如何使用dom4j來建立xml文件。dom

1.項目結構

在這裏咱們要,引入dom4j中的兩個jar包,分別是:工具

dom4j-1.6.1;測試

jaxen-1.1-beta-6;編碼

2.簡要介紹

  >建立xml 的主要類 DocumentHelper
  document = DocumentHelper.createDocument();spa


  >寫入文件的主要類XMLWriter
  >格式化xml的輔助類OutputFormat
  OutputFormat format = OutputFormat.createPrettyPrint();
  writer = new XMLWriter(new FileWriter(filepath), format);

  >格式化輸出 OutputFormat  相應的還有createCompactFormat() 建立壓縮的xml文件,刪去了全部的換行等無用的字符。createPrettyPrint() 則是生成格式化的xml 代碼,讓看起來好讀一點。
code

3.實例

下面以代碼來詳細講解,註釋很清楚。orm

代碼清單【1】XmlUtils.javaxml

  1 package com.lxf.xmlUtils;
  2 
  3 import java.io.File;
  4 import java.io.FileNotFoundException;
  5 import java.io.FileOutputStream;
  6 import java.io.IOException;
  7 import java.io.InputStream;
  8 import java.io.OutputStreamWriter;
  9 import java.util.List;
 10 import java.util.Properties;
 11 import java.util.UUID;
 12 
 13 import org.dom4j.Attribute;
 14 import org.dom4j.Document;
 15 import org.dom4j.DocumentException;
 16 import org.dom4j.DocumentHelper;
 17 import org.dom4j.Element;
 18 import org.dom4j.io.OutputFormat;
 19 import org.dom4j.io.SAXReader;
 20 import org.dom4j.io.XMLWriter;
 21 
 22 
 23 /**
 24  * 使用dom4j生成和解析xml文件
 25  * @author Administrator
 26  *2016/12/05
 27  */
 28 public class XmlUtils
 29 {
 30     private static final XmlUtils INSTANCE = new XmlUtils();
 31     
 32     private static final String UU_STRING = UUID.randomUUID().toString().substring(0, 5);
 33     private static final String FILEBASEPATH = getPropertiesInfo("filepath") +"\\"+ UU_STRING + ".xml" ;
 34     
 35     public static XmlUtils getInstance()
 36     {
 37         return INSTANCE;
 38     }
 39     
 40     
 41     /**
 42      * 1.使用dom4j建立xml文檔對象
 43      */
 44     public static Document createDocument()
 45     {
 46         /*
 47          * 1.使用DocumentHelper建立文檔對象.
 48          */
 49         Document document = DocumentHelper.createDocument();
 50         /*
 51          * 2.建立根節點
 52          */
 53         Element root = DocumentHelper.createElement("message");
 54         document.setRootElement(root);
 55         /*
 56          * 3.爲根節點設置一級節點
 57          */
 58         Element element1 = root.addElement("name");
 59         element1.setText("java");
 60         
 61         Element element2 = root.addElement("age");
 62         element2.setText("23");
 63         /*
 64          * 爲一級節點設置子節點
 65          */
 66         Element element3 = root.addElement("address");
 67         Element element31 = element3.addElement("id");
 68         element31.setText("1");
 69         Element element32 = element3.addElement("province");
 70         element32.setText("北京市");
 71         Element element33 = element3.addElement("street");
 72         element33.setText("長安街");
 73         /*
 74          *4.爲節點設置屬性 
 75          */
 76         root.setAttributeValue("version", "2.0");
 77         element1.setAttributeValue("kind", "book");
 78         
 79         return document;
 80         
 81     }
 82     
 83     /**
 84      * 2.使用dom4j建立輸出xml文件
 85      */
 86     public static void createXml()
 87     {
 88         /*
 89          * 1.建立文檔對象
 90          */
 91         Document document = createDocument();
 92         //生成的xml文件存放路徑
 93         String filePath =FILEBASEPATH;
 94         File file = new File(filePath);
 95         
 96         OutputStreamWriter osw = null;
 97         try 
 98         {
 99             osw = new OutputStreamWriter(new FileOutputStream(file));
100             /*
101              * 2.設置xml文檔的輸出格式爲縮進
102              */
103             OutputFormat format = OutputFormat.createPrettyPrint();
104             /*
105              *3.設置輸出文檔的編碼爲UTF-8 
106              */
107             format.setEncoding("UTF-8");
108             XMLWriter out = new XMLWriter(osw, format);
109             /*
110              * 4.輸出xml文檔
111              */
112             out.write(document);
113             
114         } 
115         catch (FileNotFoundException e) 
116         {
117             e.printStackTrace();
118         }
119         catch (IOException e) 
120         {
121             e.printStackTrace();
122         }
123         finally
124         {
125             //關閉輸出流
126             if(null != osw )
127             {
128                 try 
129                 {
130                     osw.close();
131                 } 
132                 catch (IOException e) 
133                 {
134                     e.printStackTrace();
135                 }
136             }
137         }
138     }
139     
140     /**
141      * 3.使用dom4j解析xml文件
142      */
143     public static void analyzeXml()
144     {
145         //生成的xml文件存放路徑
146         String filePath =FILEBASEPATH;
147         File file = new File(filePath);
148         /*
149          * 1.使用SAXReader建立Document文檔對象
150          */
151         SAXReader reader = new SAXReader();
152         try 
153         {
154             Document document = reader.read(file);
155             /*
156              * 2.獲取xml文件的根節點
157              */
158             Element root = document.getRootElement();
159             /*
160              * 3.獲取子節點和屬性
161              */
162             iteratorCherk(root);
163         } 
164         catch (DocumentException e)
165         {
166             e.printStackTrace();
167         }
168         
169     }
170     
171     /**
172      * 4.獲取節點名,節點屬性
173      */
174     public static void iteratorCherk(Element element)
175     {
176         List<Element> elements = element.elements();
177         for(Element e : elements)
178         {
179             List<Attribute> attributeList = e.attributes();
180             String name = e.getName();
181             String text = e.getTextTrim();
182             if(text.length()==0)
183             {
184                 System.out.println(name+":");
185             }else
186             {
187                 System.out.println(name+"="+ text);
188             }
189             for(Attribute att : attributeList)
190             {
191                 String aname = att.getName();
192                 String atext = att.getText();
193                 System.out.println(aname +"="+ atext);
194             }
195             iteratorCherk(e);
196         }
197         
198     }
199 
200     /**
201      * 5.獲取配置文件的配置信息
202      * @return 
203      */
204     public static String getPropertiesInfo(String string)
205     {
206         InputStream inputStream = XmlUtils.class.getClassLoader().getResourceAsStream("config.properties");
207         Properties p = new Properties();
208         try
209         {
210             p.load(inputStream);
211         }
212         catch (IOException e) 
213         {
214             e.printStackTrace();
215         }
216         return p.getProperty(string);
217     }
218 }

 

使用JUnit測試,代碼清單【2】XmlTest.java對象

 1 package demo;
 2 
 3 import org.junit.Test;
 4 
 5 import com.lxf.xmlUtils.XmlUtils;
 6 
 7 /**
 8  * xml工具類測試
 9  * @author Administrator
10  *
11  */
12 public class XmlTest
13 {
14     /**
15      * 建立xml文件測試
16      */
17     @Test
18     public void createXmlTest()
19     {
20         XmlUtils.getInstance().createXml();
21     }
22     
23     /**
24      * 解析xml文件測試
25      */
26     @Test
27     public void analyzeXmlTest()
28     {
29         XmlUtils.getInstance().analyzeXml();
30     }
31 
32 }

 

 

4.拓展和後期補充

  能夠看到,我在項目中配置了一個.properties文件,你們能夠在爲xml文件增長節點和給節點賦值的時候,

讀取配置文件的內容(.properties文件的內容結構是key=value).關於讀取配置文件能夠參照個人上一篇總結(java讀取properties配置文件總結).

將來兩天,我還會進行javaBean與Xml文件相互轉換的總結,目前的想法是:

(1)使用目前掌握的dom4j知識;

(2)使用JAXBContext類,是應用的入口,用於管理XML/Java綁定信息。

       使用Marshaller接口,將Java對象序列化爲XML數據;

    使用Unmarshaller接口,將XML數據反序列化爲Java對象。

相關文章
相關標籤/搜索