JAVA语言利用DOM解析XML文件

利用DOM解析XML文件的时候,会把XML文件预读的内存中,如果是比较大的XML文件或者是移动设备的话,不建议使用此方法

下面是我解析一个XML文件的详细代码

  1. import Java.io.InputStream;  
  2.   
  3. import javax.xml.parsers.DocumentBuilder;  
  4. import javax.xml.parsers.DocumentBuilderFactory;  
  5.   
  6. import org.w3c.dom.Document;  
  7. import org.w3c.dom.Element;  
  8. import org.w3c.dom.Node;  
  9. import org.w3c.dom.NodeList;  
  10.   
  11. import com.fujitsu.cn.model.Patent;  
  12. import com.fujitsu.cn.util.LogHelper;  
  13. /** 
  14.  * 采用DOM解析xml文件 
  15.  */  
  16. public class DOMDetailService {  
  17.       
  18.     public static Patent getPatent(InputStream inStream) throws Exception {  
  19.         Patent patent = new Patent();  
  20.           
  21.         LogHelper.v("domservice");  
  22.           
  23.         DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();  
  24.         DocumentBuilder db = dbf.newDocumentBuilder();  
  25.         Document document = db.parse(inStream);  
  26.   
  27.         //通过getDocumentElement()方法获得该xml文件的根节点   
  28.         Element root = document.getDocumentElement();  
  29.         //获得以 details为标签对的所有节点对的列表<details></details>   
  30.         NodeList detailNodes = root.getElementsByTagName("details");  
  31.           
  32.         //由于本xml文件中只有一个这样的标签对,通过item(i)得到该元素,并且进行强制转化   
  33.         Element patentElement = (Element) detailNodes.item(0);  
  34.         //获得该标签下面的所有标签的节点列表   
  35.         NodeList childList = patentElement.getChildNodes();  
  36.           
  37.         //对获得到的节点列表进行遍历   getLength()可以得到NodeList列表的长度   
  38.         for(int i=0; i<childList.getLength();i++){  
  39.             //遍历所有的属性节点   nodelist.item(i)返回一个Node节点   
  40.             Node patentAttribut = (Node)childList.item(i);  
  41.               
  42.             //由于可能会出现空的节点,对该节点进行判断,判断该节点是不是该xml中的元素   
  43.             //Node.ELEMENT_NODE的值为1,表示该节点是一个Element   
  44.             if(patentAttribut.getNodeType() == Node.ELEMENT_NODE){  
  45.                 //通过getNodeName()得到该Node的名字   
  46.                 //例如遍历到<type>3</type>,取值以后就是 type   
  47.                 String tag = patentAttribut.getNodeName();  
  48.             //getFirstChild()表示获得该节点下面的第一个孩子,getNodeValue()表示得到该孩子的值   
  49.             //例如遍历到<type>3</type>通过该函数得到的值为3   
  50.                 String val = patentAttribut.getFirstChild().getNodeValue();  
  51.                 if("othercontents".equals(tag)){                      
  52.                     patent.setOthercontents(val);  
  53.                 }else   
  54.                     if("publiccountry".equals(tag)){  
  55.                         patent.setCountry(val);  
  56.                 }else  
  57.                     if("type".equals(tag)){  
  58.                         patent.setType(val);  
  59.                     }  
  60.                 else  
  61.                     if("title".equals(tag)){  
  62.                         patent.setTitle(val);  
  63.                     }  
  64.                 else  
  65.                     if("IPC".equals(tag)){  
  66.                         patent.setIpc_number(val);  
  67.                     }  
  68.                 else  
  69.                     if("status".equals(tag)){  
  70.                         patent.setStatus(val);  
  71.                     }  
  72.                 else  
  73.                     if("pagenum".equals(tag)){  
  74.                         patent.setPagenum(val);  
  75.                     }  
  76.                 else  
  77.                     if("submitid".equals(tag)){  
  78.                         patent.setSubmit_number(val);  
  79.                     }  
  80.                 else  
  81.                     if("inventors".equals(tag)){  
  82.                         patent.setInventor(val);  
  83.                     }  
  84.                 else  
  85.                     if("agent".equals(tag)){  
  86.                         patent.setAgent(val);  
  87.                     }  
  88.                 else  
  89.                     if("claims".equals(tag)){  
  90.                         patent.setClaims(val);  
  91.                     }  
  92.                 else  
  93.                     if("applicant".equals(tag)){  
  94.                         patent.setProposer(val);  
  95.                     }  
  96.             }  
  97.         }  
  98.         inStream.close();  
  99.         return patent;  
  100.     }  
  101. }  

对该单元进行测试的测试类如下所示:

  1. import java.io.InputStream;  
  2. import java.util.List;  
  3.   
  4. public class Test {  
  5.     public static void main(String[] args) throws Exception {  
  6.         InputStream inStream = new MainTest().getClass().getClassLoader()  
  7.                 .getResourceAsStream("detail.xml");  
  8.         Patent p = DOMDetailService.getPatent(inStream);  
  9.         System.out.println(p.getOthercontents());  
  10.     }  
  11. }  

解析的XML文件由于内容太多,已经将其中的内容精简

  1. <?xml version="1.0" encoding="utf-8"?>   
  2. <response>   
  3.   <details>   
  4.     <othercontents>1</othercontents>   
  5.     <publiccountry>2</publiccountry>   
  6.     <type>3</type>   
  7.     <title>4</title>   
  8.     <IPC>5</IPC>   
  9.     <status>6</status>   
  10.     <pagenum>7</pagenum>   
  11.     <submitid>8</submitid>   
  12.     <submitdate>9</submitdate>   
  13.     <inventors>10</inventors>   
  14.     <agent>11</agent>   
  15.     <claims>12</claims>   
  16.     <applicant>13</applicant>   
  17.   </details>   
  18. </response>  

用到的Model如下所示

  1. public class Patent {  
  2.     private String title;  
  3.     private String country;  
  4.     private String type;  
  5.     private String status;  
  6.     private String ipc_number;  
  7.     private String patent_pages;  
  8.     private String submit_number;  
  9.     private String submit_data;  
  10.     private String proposer;  
  11.     private String inventor;  
  12.     private String agent;  
  13.     private String othercontents;  
  14.     private String pagenum;  
  15.     private String articleid;  
  16.     private String claims;  
  17.       
  18.     public String getTitle() {  
  19.         return title;  
  20.     }  
  21.     public void setTitle(String title) {  
  22.         this.title = title;  
  23.     }  
  24.     public String getCountry() {  
  25.         return country;  
  26.     }  
  27.     public void setCountry(String country) {  
  28.         this.country = country;  
  29.     }  
  30.     public String getType() {  
  31.         return type;  
  32.     }  
  33.     public void setType(String type) {  
  34.         this.type = type;  
  35.     }  
  36.     public String getStatus() {  
  37.         return status;  
  38.     }  
  39.     public void setStatus(String status) {  
  40.         this.status = status;  
  41.     }  
  42.     public String getPatent_pages() {  
  43.         return patent_pages;  
  44.     }  
  45.     public void setPatent_pages(String patentPages) {  
  46.         patent_pages = patentPages;  
  47.     }  
  48.     public String getSubmit_number() {  
  49.         return submit_number;  
  50.     }  
  51.     public void setSubmit_number(String submitNumber) {  
  52.         submit_number = submitNumber;  
  53.     }  
  54.     public String getSubmit_data() {  
  55.         return submit_data;  
  56.     }  
  57.     public void setSubmit_data(String submitData) {  
  58.         submit_data = submitData;  
  59.     }  
  60.     public String getProposer() {  
  61.         return proposer;  
  62.     }  
  63.     public void setProposer(String proposer) {  
  64.         this.proposer = proposer;  
  65.     }  
  66.     public String getInventor() {  
  67.         return inventor;  
  68.     }  
  69.     public void setInventor(String inventor) {  
  70.         this.inventor = inventor;  
  71.     }  
  72.     public String getAgent() {  
  73.         return agent;  
  74.     }  
  75.     public void setAgent(String agent) {  
  76.         this.agent = agent;  
  77.     }  
  78.     public String getIpc_number() {  
  79.         return ipc_number;  
  80.     }  
  81.     public void setIpc_number(String ipcNumber) {  
  82.         ipc_number = ipcNumber;  
  83.     }  
  84.     public String getOthercontents() {  
  85.         return othercontents;  
  86.     }  
  87.     public void setOthercontents(String othercontents) {  
  88.         this.othercontents = othercontents;  
  89.     }  
  90.     public String getPagenum() {  
  91.         return pagenum;  
  92.     }  
  93.     public void setPagenum(String pagenum) {  
  94.         this.pagenum = pagenum;  
  95.     }  
  96.     public String getArticleid() {  
  97.         return articleid;  
  98.     }  
  99.     public void setArticleid(String articleid) {  
  100.         this.articleid = articleid;  
  101.     }  
  102.     public String getClaims() {  
  103.         return claims;  
  104.     }  
  105.     public void setClaims(String claims) {  
  106.         this.claims = claims;  
  107.     }  
  108.       
  109.       
  110. }