4中解析XML文檔的方法

目錄結構

  • 項目
    • xmlParse(包名)
      • People.java
      • people.xml
      • PeopleHandler.java
      • SaxParse.java
      • DomParse.java
      • JDomPares.java
      • Dom4JParse.java

People類

package xmlParse;

public class People {
    private String name;
    private int age;
    private String tel;
    private int id;

    @Override
    public String toString() {
        return "People{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", tel='" + tel + '\'' +
                ", id=" + id +
                '}';
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getTel() {
        return tel;
    }

    public void setTel(String tel) {
        this.tel = tel;
    }
}

xml文件(people.xml)

<?xml version="1.0" encoding="utf-8" ?>
<people>
    <person id="1">
        <name>小紅</name>
        <age>12</age>
        <tel>123456</tel>
    </person>
    <person id="2">
        <name>小趙</name>
        <age>13</age>
        <tel>123456789</tel>
    </person>
</people>

SAX解析

  • PeopleHandler類(處理xml)
package xmlParse;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

import java.util.ArrayList;
import java.util.List;

public class PeopleHandle extends DefaultHandler {
    private List<People> list;
    private People people;
    private String tag=null;

    @Override
    public void startDocument() throws SAXException {
        super.startDocument();
        list=new ArrayList<>();

        System.out.println("開始解析xml文檔....");
    }

    @Override
    public void endDocument() throws SAXException {
        super.endDocument();
        System.out.println("解析xml文檔結束....");
    }

    @Override
    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
        super.startElement(uri, localName, qName, attributes);
        if(qName.equals("person")){
            people=new People();
            people.setId(Integer.parseInt(attributes.getValue("id")));
        }
        tag=qName;
        System.out.println("開始元素"+qName);
    }

    @Override
    public void endElement(String uri, String localName, String qName) throws SAXException {
        super.endElement(uri, localName, qName);
        if(qName.equals("person")){
            list.add(people);
        }
        tag=null;
        System.out.println(uri+"結束元素"+qName);
    }

    @Override
    public void characters(char[] ch, int start, int length) throws SAXException {
        super.characters(ch, start, length);
        String s = new String(ch,start,length);
        System.out.println(s);
        if(tag!=null){
            if(tag.equals("name")){
                people.setName(s);
            }else if(tag.equals("age")){
                people.setAge(Integer.parseInt(s));
            }else if(tag.equals("tel")){
                people.setTel(s);
            }
        }
    }

    public List<People> getList() {
        return list;
    }

}
  • SaxParseTest類
package xmlParse;

import org.xml.sax.SAXException;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParserFactory;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class SaxParserTest {
    //使用SAX解析XML
    public static void main(String[] args)throws ParserConfigurationException, SAXException, IOException {
        InputStream xml = Thread.currentThread().getContextClassLoader().getResourceAsStream("xmlParse/people.xml");
        PeopleHandle peopleHandle = new PeopleHandle();
        SAXParserFactory.newInstance().newSAXParser().parse(xml,peopleHandle);
        List<People> list = peopleHandle.getList();
        for (People p: list) {
            System.out.println(p);
        }
    }
}
  • 結果:
"C:\Program Files\Java\jdk-9.0.4\bin\java.exe" "-javaagent:D:\Program Files\JetBrains\IntelliJ IDEA 2018.3.4\lib\idea_rt.jar=50636:D:\Program Files\JetBrains\IntelliJ IDEA 2018.3.4\bin" -Dfile.encoding=UTF-8 -classpath "D:\java\test\bin;D:\java\test\libs\guava-27.0-jre.jar;D:\Program Files\JetBrains\IntelliJ IDEA 2018.3.4\lib\junit.jar;D:\java\test\libs\apache-mina-2.0.20\dist\mina-core-2.0.20.jar;D:\java\test\libs\apache-mina-2.0.20\lib\slf4j-api-1.7.26.jar;D:\java\test\libs\jdom-2.0.6.jar;D:\java\test\libs\dom4j-2.0.2.jar" xmlParse.SaxParserTest
開始解析xml文檔....
開始元素people

    
開始元素person

        
開始元素name
小紅
結束元素name

        
開始元素age
12
結束元素age

        
開始元素tel
123456
結束元素tel

    
結束元素person

    
開始元素person

        
開始元素name
小趙
結束元素name

        
開始元素age
13
結束元素age

        
開始元素tel
123456789
結束元素tel

    
結束元素person


結束元素people
解析xml文檔結束....
People{name='小紅', age=12, tel='123456', id=1}
People{name='小趙', age=13, tel='123456789', id=2}

DOM解析

  • DomParseTest類
package xmlParse;

import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class DomParseTest {
    //使用DOM解析XML
    public static void main(String[] args)throws ParserConfigurationException, SAXException, IOException {
        DocumentBuilder documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
        InputStream xml = Thread.currentThread().getContextClassLoader().getResourceAsStream("xmlParse/people.xml");
        Document document = documentBuilder.parse(xml);
        NodeList personEle = document.getElementsByTagName("person");

        People people=null;
        List<People> peopleList= new ArrayList();
        for (int i = 0; i < personEle.getLength(); i++) {
            Node item = personEle.item(i);
            people=new People();
            people.setId(Integer.parseInt(item.getAttributes().getNamedItem("id").getNodeValue()));
            NodeList childNodes = item.getChildNodes();
            for (int j = 0; j < childNodes.getLength(); j++) {
                Node item1 = childNodes.item(j);
                if(item1.getNodeName().equals("name")){
                    people.setName(item1.getTextContent());
                }else if(item1.getNodeName().equals("age")){
                    people.setAge(Integer.parseInt(item1.getTextContent()));
                }else if(item1.getNodeName().equals("tel")){
                    people.setTel(item1.getTextContent());
                }
            }
            peopleList.add(people);
        }
        System.out.println(Arrays.toString(peopleList.toArray()));
    }

}
  • 結果
"C:\Program Files\Java\jdk-9.0.4\bin\java.exe" "-javaagent:D:\Program Files\JetBrains\IntelliJ IDEA 2018.3.4\lib\idea_rt.jar=46783:D:\Program Files\JetBrains\IntelliJ IDEA 2018.3.4\bin" -Dfile.encoding=UTF-8 -classpath "D:\java\test\bin;D:\java\test\libs\guava-27.0-jre.jar;D:\Program Files\JetBrains\IntelliJ IDEA 2018.3.4\lib\junit.jar;D:\java\test\libs\apache-mina-2.0.20\dist\mina-core-2.0.20.jar;D:\java\test\libs\apache-mina-2.0.20\lib\slf4j-api-1.7.26.jar;D:\java\test\libs\jdom-2.0.6.jar;D:\java\test\libs\dom4j-2.0.2.jar" xmlParse.DomParseTest
[People{name='小紅', age=12, tel='123456', id=1}, People{name='小趙', age=13, tel='123456789', id=2}]

JDOM解析

package xmlParse;

import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.JDOMException;
import org.jdom2.input.SAXBuilder;
import org.jdom2.input.sax.SAXBuilderEngine;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;

public class JDomParse {
    /**
     * 使用第三方庫JDOM解析XML
     * JDOM下載地址:http://www.jdom.org/downloads/
     */
    public static void main(String[] args) throws IOException, JDOMException {
        InputStream xml = Thread.currentThread().getContextClassLoader().getResourceAsStream("xmlParse/people.xml");
        Document build = new SAXBuilder().build(xml);
        Element rootElement = build.getRootElement();
        People people=null;
        List<People> peopleList= new ArrayList();
        Iterator<Element> iterator = rootElement.getChildren("person").iterator();
        while (iterator.hasNext()){
            Element ele = iterator.next();
            people=new People();
            people.setId(Integer.parseInt(ele.getAttribute("id").getValue()));
            people.setName(ele.getChildText("name"));
            people.setAge(Integer.parseInt(ele.getChildText("age")));
            people.setTel(ele.getChildText("tel"));
            peopleList.add(people);
        }
        System.out.println(Arrays.toString(peopleList.toArray()));
    }
}

  • 結果
"C:\Program Files\Java\jdk-9.0.4\bin\java.exe" "-javaagent:D:\Program Files\JetBrains\IntelliJ IDEA 2018.3.4\lib\idea_rt.jar=46783:D:\Program Files\JetBrains\IntelliJ IDEA 2018.3.4\bin" -Dfile.encoding=UTF-8 -classpath "D:\java\test\bin;D:\java\test\libs\guava-27.0-jre.jar;D:\Program Files\JetBrains\IntelliJ IDEA 2018.3.4\lib\junit.jar;D:\java\test\libs\apache-mina-2.0.20\dist\mina-core-2.0.20.jar;D:\java\test\libs\apache-mina-2.0.20\lib\slf4j-api-1.7.26.jar;D:\java\test\libs\jdom-2.0.6.jar;D:\java\test\libs\dom4j-2.0.2.jar" xmlParse.DomParseTest
[People{name='小紅', age=12, tel='123456', id=1}, People{name='小趙', age=13, tel='123456789', id=2}]

DOM4J解析

package xmlParse;

import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;

public class Dom4jParse {
    /**
     * 使用第三方庫DOM4J解析XML
     * DOM4J下載地址:https://dom4j.github.io/
     */
    public static void main(String[] args)throws DocumentException {
        InputStream xml = Thread.currentThread().getContextClassLoader().getResourceAsStream("xmlParse/people.xml");
        Element rootElement = new SAXReader().read(xml).getRootElement();
        Iterator<Element> iterator = rootElement.elementIterator("person");

        People people=null;
        List<People> peopleList= new ArrayList();
        while (iterator.hasNext()){
            Element ele = iterator.next();
            people=new People();
            people.setId(Integer.parseInt(ele.attribute("id").getValue()));
            Iterator<Element> iterator1 = ele.elements().iterator();
            while (iterator1.hasNext()){
                Element ele1 = iterator1.next();
                if(ele1.getName().equals("name")){
                    people.setName(ele1.getText());
                }else if(ele1.getName().equals("age")){
                    people.setAge(Integer.parseInt(ele1.getText()));
                }else if(ele1.getName().equals("tel")){
                    people.setTel(ele1.getText());
                }
            }
            peopleList.add(people);
        }
        System.out.println(Arrays.toString(peopleList.toArray()));
    }
}

  • 結果
"C:\Program Files\Java\jdk-9.0.4\bin\java.exe" "-javaagent:D:\Program Files\JetBrains\IntelliJ IDEA 2018.3.4\lib\idea_rt.jar=46783:D:\Program Files\JetBrains\IntelliJ IDEA 2018.3.4\bin" -Dfile.encoding=UTF-8 -classpath "D:\java\test\bin;D:\java\test\libs\guava-27.0-jre.jar;D:\Program Files\JetBrains\IntelliJ IDEA 2018.3.4\lib\junit.jar;D:\java\test\libs\apache-mina-2.0.20\dist\mina-core-2.0.20.jar;D:\java\test\libs\apache-mina-2.0.20\lib\slf4j-api-1.7.26.jar;D:\java\test\libs\jdom-2.0.6.jar;D:\java\test\libs\dom4j-2.0.2.jar" xmlParse.DomParseTest
[People{name='小紅', age=12, tel='123456', id=1}, People{name='小趙', age=13, tel='123456789', id=2}]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章