Dom、Sax、Dom4j分別解析xml
阿新 • • 發佈:2018-12-06
一: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); } } }