<?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文件, 事件