如何在java中使用jdom生成和解析xml文件


在java中,可以使用org.jdom*這個包來完成生成.xml文件的任務,下面來通過一個我自己寫的例子來簡單介紹一下這個包里面一些類的基本使用:

 1 import java.io.FileOutputStream;  
 2 import java.io.IOException; 
//導入org.jdom的一些類
3 import org.jdom2.Document; 4 import org.jdom2.Element; 5 import org.jdom2.JDOMException; 6 import org.jdom2.output.Format; 7 import org.jdom2.output.XMLOutputter; 8 9 public class XMLGetter { 10 11 public void BuildXMLDoc(int number, String ipAddress[], String testAddress[]) throws IOException, JDOMException { 12 13 Element equipments = new Element("equipments");//建立根節點 14 Document doc = new Document(equipments);//用把根節點創建一個Document 15 16 Element equipmentsNum = new Element("equipments-number");//創建根節點下的子節點 17 equipmentsNum.setText(Integer.toString(number)); 18 equipments.addContent(equipmentsNum);//把該子節點加入父節點 19 //循環創建子節點,並加入到父節點中 20 for (int i = 1; i <= number; i++) { 21 Element equipment = new Element("equipment"); 22 equipment.setAttribute("id", "" + i);//添加節點屬性並賦值 23 24 Element loginInfo = new Element("login-info"); 25 loginInfo.addContent(new Element("address").setText(ipAddress[i-1])); //創建節點,給節點賦值,然后加入到他的父節點 26 loginInfo.addContent(new Element("telnet-password").setText("CISCO")); 27 loginInfo.addContent(new Element("enable-password").setText("CISCO")); 28 equipment.addContent(loginInfo); 29 30 Element testCommands = new Element("test-commands"); 31 testCommands.addContent(new Element("command").setText("show ip route")); 32 equipment.addContent(testCommands); 33 34 Element testReturn = new Element("test-returns"); 35 testReturn.addContent(new Element("return").setText(testAddress[i-1])); 36 equipment.addContent(testReturn); 37 38 equipments.addContent(equipment); 39 } 40 41 XMLOutputter xmlOut = new XMLOutputter(Format.getPrettyFormat());//new一個XMLOutputter,采用PrettyFormat格式(生成的XML可以自動換行) 42 xmlOut.output(doc, new FileOutputStream("autoTest.xml"));//將生成的XML文件輸出到文件 43 } 44 45 public static void main(String args[]){ 46 try { 47 XMLGetter xmlGetter = new XMLGetter(); 48 String[] ipAddress = {"172.16.0.1","172.16.0.2"}; 49 String[] testAddress = {"192.168.1.0/24","192.168.2.0/24"}; 50 System.out.println("生成 mxl 文件..."); 51 xmlGetter.BuildXMLDoc(2, ipAddress, testAddress); 52 } catch (Exception e) { 53 e.printStackTrace(); 54 } 55 } 56 }

運行結果:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <equipments>
 3   <equipments-number>2</equipments-number>
 4   <equipment id="1">
 5     <login-info>
 6       <address>172.16.0.1</address>
 7       <telnet-password>CISCO</telnet-password>
 8       <enable-password>CISCO</enable-password>
 9     </login-info>
10     <test-commands>
11       <command>show ip route</command>
12     </test-commands>
13     <test-returns>
14       <return>192.168.1.0/24</return>
15     </test-returns>
16   </equipment>
17   <equipment id="2">
18     <login-info>
19       <address>172.16.0.2</address>
20       <telnet-password>CISCO</telnet-password>
21       <enable-password>CISCO</enable-password>
22     </login-info>
23     <test-commands>
24       <command>show ip route</command>
25     </test-commands>
26     <test-returns>
27       <return>192.168.2.0/24</return>
28     </test-returns>
29   </equipment>
30 </equipments>

下面介紹一下如何利用org.jdom*這個包來解析xml文件,也是通過一個例子來演示如何把上面得到的xml文件解析成信息形式:

 1 import java.io.FileOutputStream;  
 2 import java.io.IOException;  
 3 import java.util.Iterator;  
 4 import java.util.List;  
 5 //下面是引用到JDOM中的類  
 6 import org.jdom2.Document;  
 7 import org.jdom2.Element;  
 8 import org.jdom2.JDOMException;  
 9 import org.jdom2.input.SAXBuilder;  
10 import org.jdom2.output.XMLOutputter;
11 
12 public class XMLParse {
13 
14     public void parseXML(String xmlPath){
15         SAXBuilder builder = new SAXBuilder();//選用jdom中的SAXBuilder解析器解析xml16         try{
17             Document doc = builder.build(xmlPath);//從傳入xml文件中提取出doc
18             Element equipments = doc.getRootElement();//從doc中得到根節點,賦值給equipments
19             List equipmentList = equipments.getChildren("equipment");//在equipments中得到名字為equipment的子節點List
20             for(Iterator iter = equipmentList.iterator(); iter.hasNext();){//循環List
21                 Element equipment = (Element)iter.next();
22                 String id = equipment.getAttributeValue("id");//得到equipment的屬性id,並把它的值賦值給字符串
23                 String ipAddress = equipment.getChild("login-info").getChild("address").getText();//兩重子節點的Text賦值給字符串
24                 String testAddress = equipment.getChild("test-returns").getChild("return").getText();
25                 System.out.println(id + "    " + ipAddress + "    " + testAddress);
26             }
27         
28         XMLOutputter outputter=new XMLOutputter();  //保存Document的修改到XML文件中  
29         outputter.output(doc,new FileOutputStream(xmlPath)); 
30             
31         }catch (JDOMException e) {  
32              e.printStackTrace();  
33         }catch (IOException e) {  
34              e.printStackTrace();  
35         }
36     }
37     
38     public static void main(String args[]){
39         XMLParse xmlParse = new XMLParse();
40         xmlParse.parseXML("autoTest.xml");
41     }
42 }

 控制台輸出的結果:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM