<?xml version="1.0" encoding="UTF-8"?> <memo> <note type="birthday"> <name>張三</name> <sex>男</sex> <date>1984</date> </note> <note type="shop"> <name>李四</name> <sex>男</sex> <date>1984</date> </note> <note type="go"> <name>王五</name> <sex>男</sex> <date>1984</date> </note> </memo>
package domTest; import java.io.File; 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; public class DomTest { public static void main(String[] args) { File xmlFile = new File("C:"+File.separator+"Users"+File.separator+"357"+File.separator+"Downloads"+File.separator+"memo.xml");//C:\Users\357\Downloads DocumentBuilder builder = null; //聲明一個DocumentBuilderFactory對象,經過單例模式建立 DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); try { builder = documentBuilderFactory.newDocumentBuilder();//取得默認的DocumentBuilder Document document = builder.parse(xmlFile);//解析文件 Element root= document.getDocumentElement();//獲取根元素 NodeList childNodes = root.getChildNodes();//得到根元素下的子節點 for (int i = 0; i < childNodes.getLength(); i++) {//對每一個子節點進行判斷 Node node = childNodes.item(i); if("note".equals(node.getNodeName())){//若是節點的名稱爲"note",則輸出note元素熟悉type System.out.println("\r\n 找到一篇日記,所屬分類;"+node.getAttributes().getNamedItem("type").getNodeValue()+"."); NodeList nodeDetail = node.getChildNodes(); //得到<memo>下的節點 for (int j = 0; j < nodeDetail.getLength(); j++) { //遍歷<memo>下的節點 Node detail = nodeDetail.item(j); switch (detail.getNodeName()) { case "name": System.out.println("姓名:"+detail.getTextContent()); break; case "sex": System.out.println("性別:"+detail.getTextContent()); break; case "date": System.out.println("生日:"+detail.getTextContent()); break; default: break; } } } } } catch (Exception e) { e.printStackTrace(); } } }
1.獲取factory,代碼以下:java
//聲明一個DocumentBuilderFactory對象,經過單例模式建立
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();node
2.獲取builder,代碼以下:dom
DocumentBuilder builder = documentBuilderFactory.newD ocumentBuilder();//取得默認的DocumentBuilder性能
3.解析爲Document對象, 代碼以下:ui
Document document = builder.parse(xmlFile);//解析文件spa
XML有哪些解析技術?區別是上面?code
有DOM,SAX,STAX等xml
DOM:處理大型文件時 性能降低的很是厲害,DOM的樹結構暫用的內存較多,並且DOM必須在解析文件以前把整個文檔裝入內存。對象
SAX:事件驅動的XML解析方式。順序讀取XML文件, 事件