1. 程式人生 > >Dom、Sax、Dom4j分別解析xml

Dom、Sax、Dom4j分別解析xml

一:Dom解析xml

package com.carlinfo.xmlparse;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

/**
 * 使用Dom解析Xml
 */
public class DomParseXml
{
    public static void main(String[] args) throws Exception
    {
        //第一步,建立Dom解析工廠
        DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
        //第二步,使用Dom解析工廠建立Dom解析器
        DocumentBuilder builder = builderFactory.newDocumentBuilder();
        //第三步,獲取整個文件物件
        Document document = builder.parse(""D:/IDEA project/bigdata/src/bookstore.xml"");
        //第四步,獲取根節點
        Element rootelement = document.getDocumentElement();
        //第五步,獲取子節點
        NodeList bookchildnodes = rootelement.getChildNodes();
        //迴圈列出所有子節點
        for (int i = 0; i < bookchildnodes.getLength(); i++)
        {
            Node node = bookchildnodes.item(i);
           // System.out.println(node.getNodeType());
            //如果這個子節點不是文字節點,那麼繼續獲取他的子節點
            if (node.getNodeType() != Node.TEXT_NODE)
            {
                Element bookElemen = (Element) node;
                String id = bookElemen.getAttribute("id");

                NodeList childNodes = bookElemen.getChildNodes();
                //再列出這一層所有的子節點
                for (int j = 0; j < childNodes.getLength(); j++)
                {
                    Node node1 = childNodes.item(j);
                   // System.out.println(node1);
                    //再判斷,當這個節點不是文字節點的時候,輸出他的子節點
                    if (node1.getNodeType() != Node.TEXT_NODE)
                    {
                        Element element = (Element) node1;
                        String elementTextContent = element.getTextContent();
                        System.out.println(elementTextContent);
                    }
                }
            }
        }

    }
}

二:Sax解析xml

package com.carlinfo.xmlparse;

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

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import javax.xml.stream.events.StartDocument;
import java.io.File;

/**
 * 使用Sax解析xml
 */
public class SaxParseXml
{
    public static void main(String[] args) throws Exception
    {
        //建立Sax解析器工廠
        SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
        //使用Sax解析器工廠建立解析器
        SAXParser saxParser = saxParserFactory.newSAXParser();
        saxParser.parse(new File("D:/IDEA project/bigdata/src/bookstore.xml"), new DefaultHandler()
        {
            @Override
            public void startDocument() throws SAXException
            {
                System.out.println("文件的開始");
            }

            @Override
            public void endDocument() throws SAXException
            {
                System.out.println("文件的結束");
            }

            @Override
            public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException
            {
                System.out.println("元素的開始");
            }

            @Override
            public void endElement(String uri, String localName, String qName) throws SAXException
            {
                System.out.println("元素的結束");
            }

            @Override
            public void characters(char[] ch, int start, int length) throws SAXException
            {
                System.out.println(new String(ch, start, length));
            }
        });


    }
}

三:Dom4j解析xml

package com.carlinfo.dom4jparse;

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

import java.io.InputStream;
import java.util.List;

public class Dom4jParse
{
    public static void main(String[] args) throws DocumentException
    {
        //建立dom4j的解析器
        SAXReader saxReader = new SAXReader();
        //獲取類路徑下面的檔案最後作為一個流物件
        InputStream inputStream = Dom4jParse.class.getClassLoader().getResourceAsStream("bookstore.xml");
        //解析流物件代表的檔案冰箱且返回一個文件物件
        Document document = saxReader.read(inputStream);
        //獲取根節點
        Element rootElement = document.getRootElement();
        List<Element> bookList = rootElement.elements("book");
        for (Element bookElement : bookList)
        {
            String id = bookElement.attributeValue("id");
            String name = bookElement.element("name").getText();
            String author = bookElement.element("author").getText();
            System.out.println(id + "\t" + name + "\t" + author);
        }
    }
}