XML文档,DOM解析

 DOM解析模型

<?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();
		}
		
			
			
			
			
	
	}
}

3个步骤建立XML文件对应的Document对象:

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

相关文章
相关标签/搜索