XML转换为JAVA

将XML文档中的内容转换为JAVA对象共有4中方式它,它们分别是DOM,SAX,DOM4J , JDOM。接下来我用代码演示JAVA官方提供我们的两种方式DOM和SAX。
DOM是JDK自带的接下来我来演示一下怎样获取XML文本中的内容。以下是xml文件中的内容。



    
        张三
        12
     

    
        李四
        16
    

我们通过DOM的方式来获取来获取xml文件中的内容。

public class DOMDemo01 {
    private static DocumentBuilderFactory documentBuilderFactory ;
    private static DocumentBuilder documentBuilder;
    private static Document document;

    public static void main(String[] args) {
        documentBuilderFactory = DocumentBuilderFactory.newInstance();
        try {
            documentBuilder = documentBuilderFactory.newDocumentBuilder();
        } catch (ParserConfigurationException e) {
            e.printStackTrace();
        }
        try {
            document = documentBuilder.parse("src/main/resources/xml/student.xml");
        } catch (SAXException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        NodeList parents =  document.getElementsByTagName("student");
        System.out.println("一共有"+parents.getLength()+"个节点");
        for(int i=0;i

以下是输出的内容


XML转换为JAVA_第1张图片
image.png

SAX解析XML文件

import org.xml.sax.SAXException;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import java.io.IOException;

public class SAXDemo {
    public static void main(String[] args) {
        SAXParserFactory factory = SAXParserFactory.newInstance();
        try {
            SAXParser parser = factory.newSAXParser();
            SAXHandle saxHandle = new SAXHandle();
            parser.parse("src/main/resources/xml/student.xml",saxHandle);
        } catch (ParserConfigurationException e) {
            e.printStackTrace();
        } catch (SAXException e) {
            e.printStackTrace();
        }catch (IOException e){
            e.printStackTrace();
        }
    }
}
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;


public class SAXHandle extends DefaultHandler {

    /*
     *  用来表示解析的开始
     */
    @Override
    public void startDocument () throws SAXException {
        super.startDocument();
        System.out.println("解析标签开始");
    }

    @Override
    public void endDocument () throws SAXException {
        super.startDocument();
        System.out.println("解析标签结束");
    }

    @Override
    public void startElement (String uri, String localName, String qName,
                              Attributes attributes) throws SAXException {
        super.startElement(uri,localName,qName,attributes);

        if(qName.equals("student") ){
            int length = attributes.getLength();
            for(int i=0;i

运行结果


XML转换为JAVA_第2张图片
image.png

总结:DOM解析将文件的内容全部加载在内存中并且形成一个DOM树,如果XML非常大,则DOM很浪费时间。SAX是基于事件的解析,会一步一步的判断每一行的XML文件中的内容,执行开始标签触发startDocument()方法,每走到结束标签都会触发一个endDocument方法。执行完最后标签会执行endDocument方法。
DOM
优点:形成DOM树,实现简单。
缺点: 当XML文件非常大时,对内存消耗比较大,容易影响解析,容易造成内存溢出。
SAX
优点:采用事件的驱动模式,不需要关系赋值节点,按行进行解析。
缺点:不易编码。