加入收藏 | 设为首页 | 会员中心 | 我要投稿 三明站长网 (https://www.0598zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

JAVA语言借助DOM解析XML文件

发布时间:2021-11-25 15:50:13 所属栏目:教程 来源:互联网
导读:利用DOM解析XML文件的时候,会把XML文件预读的内存中,如果是比较大的XML文件或者是移动设备的话,不建议使用此方法 下面是我解析一个XML文件的详细代码 import Java.io.InputStream; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.D

利用DOM解析XML文件的时候,会把XML文件预读的内存中,如果是比较大的XML文件或者是移动设备的话,不建议使用此方法
 
下面是我解析一个XML文件的详细代码
 
import Java.io.InputStream;  
  
import javax.xml.parsers.DocumentBuilder;  
import javax.xml.parsers.DocumentBuilderFactory;  
  
import org.w3c.dom.Document;  
import org.w3c.dom.Element;  
import org.w3c.dom.Node;  
import org.w3c.dom.NodeList;  
  
import com.fujitsu.cn.model.Patent;  
import com.fujitsu.cn.util.LogHelper;  
/**
 * 采用DOM解析xml文件
 */  
public class DOMDetailService {  
      
    public static Patent getPatent(InputStream inStream) throws Exception {  
        Patent patent = new Patent();  
          
        LogHelper.v("domservice");  
          
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();  
        DocumentBuilder db = dbf.newDocumentBuilder();  
        Document document = db.parse(inStream);  
  
        //通过getDocumentElement()方法获得该xml文件的根节点   
        Element root = document.getDocumentElement();  
        //获得以 details为标签对的所有节点对的列表<details></details>   
        NodeList detailNodes = root.getElementsByTagName("details");  
          
        //由于本xml文件中只有一个这样的标签对,通过item(i)得到该元素,并且进行强制转化   
        Element patentElement = (Element) detailNodes.item(0);  
        //获得该标签下面的所有标签的节点列表   
        NodeList childList = patentElement.getChildNodes();  
          
        //对获得到的节点列表进行遍历   getLength()可以得到NodeList列表的长度   
        for(int i=0; i<childList.getLength();i++){  
            //遍历所有的属性节点   nodelist.item(i)返回一个Node节点   
            Node patentAttribut = (Node)childList.item(i);  
              
            //由于可能会出现空的节点,对该节点进行判断,判断该节点是不是该xml中的元素   
            //Node.ELEMENT_NODE的值为1,表示该节点是一个Element   
            if(patentAttribut.getNodeType() == Node.ELEMENT_NODE){  
                //通过getNodeName()得到该Node的名字   
                //例如遍历到<type>3</type>,取值以后就是 type   
                String tag = patentAttribut.getNodeName();  
            //getFirstChild()表示获得该节点下面的第一个孩子,getNodeValue()表示得到该孩子的值   
            //例如遍历到<type>3</type>通过该函数得到的值为3   
                String val = patentAttribut.getFirstChild().getNodeValue();  
                if("othercontents".equals(tag)){                      
                    patent.setOthercontents(val);  
                }else   
                    if("publiccountry".equals(tag)){  
                        patent.setCountry(val);  
                }else  
                    if("type".equals(tag)){  
                        patent.setType(val);  
                    }  
                else  
                    if("title".equals(tag)){  
                        patent.setTitle(val);  
                    }  
                else  
                    if("IPC".equals(tag)){  
                        patent.setIpc_number(val);  
                    }  
                else  
                    if("status".equals(tag)){  
                        patent.setStatus(val);  
                    }  
                else  
                    if("pagenum".equals(tag)){  
                        patent.setPagenum(val);  
                    }  
                else  
                    if("submitid".equals(tag)){  
                        patent.setSubmit_number(val);  
                    }  
                else  
                    if("inventors".equals(tag)){  
                        patent.setInventor(val);  
                    }  
                else  
                    if("agent".equals(tag)){  
                        patent.setAgent(val);  
                    }  
                else  
                    if("claims".equals(tag)){  
                        patent.setClaims(val);  
                    }  
                else  
                    if("applicant".equals(tag)){  
                        patent.setProposer(val);  
                    }  
            }  
        }  
        inStream.close();  
        return patent;  
    }  
}  
对该单元进行测试的测试类如下所示:
 
import java.io.InputStream;  
import java.util.List;  
  
public class Test {  
    public static void main(String[] args) throws Exception {  
        InputStream inStream = new MainTest().getClass().getClassLoader()  
                .getResourceAsStream("detail.xml");  
        Patent p = DOMDetailService.getPatent(inStream);  
        System.out.println(p.getOthercontents());  
    }  
}  
解析的XML文件由于内容太多,已经将其中的内容精简
 
<?xml version="1.0" encoding="utf-8"?>   
<response>   
  <details>   
    <othercontents>1</othercontents>   
    <publiccountry>2</publiccountry>   
    <type>3</type>   
    <title>4</title>   
    <IPC>5</IPC>   
    <status>6</status>   
    <pagenum>7</pagenum>   
    <submitid>8</submitid>   
    <submitdate>9</submitdate>   
    <inventors>10</inventors>   
    <agent>11</agent>   
    <claims>12</claims>   
    <applicant>13</applicant>   
  </details>   
</response>  
用到的Model如下所示
 
public class Patent {  
    private String title;  
    private String country;  
    private String type;  
    private String status;  
    private String ipc_number;  
    private String patent_pages;  
    private String submit_number;  
    private String submit_data;  
    private String proposer;  
    private String inventor;  
    private String agent;  
    private String othercontents;  
    private String pagenum;  
    private String articleid;  
    private String claims;  
      
    public String getTitle() {  
        return title;  
    }  
    public void setTitle(String title) {  
        this.title = title;  
    }  
    public String getCountry() {  
        return country;  
    }  
    public void setCountry(String country) {  
        this.country = country;  
    }  
    public String getType() {  
        return type;  
    }  
    public void setType(String type) {  
        this.type = type;  
    }  
    public String getStatus() {  
        return status;  
    }  
    public void setStatus(String status) {  
        this.status = status;  
    }  
    public String getPatent_pages() {  
        return patent_pages;  
    }  
    public void setPatent_pages(String patentPages) {  
        patent_pages = patentPages;  
    }  
    public String getSubmit_number() {  
        return submit_number;  
    }  
    public void setSubmit_number(String submitNumber) {  
        submit_number = submitNumber;  
    }  
    public String getSubmit_data() {  
        return submit_data;  
    }  
    public void setSubmit_data(String submitData) {  
        submit_data = submitData;  
    }  
    public String getProposer() {  
        return proposer;  
    }  
    public void setProposer(String proposer) {  
        this.proposer = proposer;  
    }  
    public String getInventor() {  
        return inventor;  
    }  
    public void setInventor(String inventor) {  
        this.inventor = inventor;  
    }  
    public String getAgent() {  
        return agent;  
    }  
    public void setAgent(String agent) {  
        this.agent = agent;  
    }  
    public String getIpc_number() {  
        return ipc_number;  
    }  
    public void setIpc_number(String ipcNumber) {  
        ipc_number = ipcNumber;  
    }  
    public String getOthercontents() {  
        return othercontents;  
    }  
    public void setOthercontents(String othercontents) {  
        this.othercontents = othercontents;  
    }  
    public String getPagenum() {  
        return pagenum;  
    }  
    public void setPagenum(String pagenum) {  
        this.pagenum = pagenum;  
    }  
    public String getArticleid() {  
        return articleid;  
    }  
    public void setArticleid(String articleid) {  
        this.articleid = articleid;  
    }  
    public String getClaims() {  
        return claims;  
    }  
    public void setClaims(String claims) {  
        this.claims = claims;  
    }  
      
      
}  

(编辑:三明站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!