首页 > 代码库 > xml解析之----DOM解析

xml解析之----DOM解析

DOM模型(documentobject model)
?DOM解析器在解析XML文档时,会把文档中的全部元素。依照其出现的层次关系。解析成一个个Node对象(节点)。
?在dom中。节点之间关系例如以下:
?位于一个节点之上的节点是该节点的父节点(parent)
?一个节点之下的节点是该节点的子节点(children)
?同一层次,具有同样父节点的节点是兄弟节点(sibling)
?一个节点的下一个层次的节点集合是节点后代(descendant)
父、祖父节点

lNode对象提供了一系列常量来代表结点的类型,当开发者获得某个Node类型后,就能够把Node节点转换成对应的节点对象(Node的子类对象),以便于调用其特有的方法。

(查看API文档)

lNode对象提供了对应的方法去获得它的父结点或子结点。编程人员通过这些方法就能够读取整个XML文档的内容、或加入、改动、删除XML文档的内容了。


首先引出要解析的xml文件:

<?

xml version="1.0" encoding="UTF-8"?

><书架> <书> <书名>javaweb开发</书名> <作者 id="12">张孝祥</作者> <售价>59元</售价> </书> <书> <书名>JavaScript网页开发</书名> <作者>张孝祥</作者> <售价>28.00元</售价> </书> </书架>


下面即是对xml的增删改查操作:

import java.io.FileOutputStream;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.junit.Before;
import org.junit.Test;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class Demo3 {

	/**
	 * 利用dom完毕文档的crud
	 * @param args
	 * @throws Exception 
	 * @throws ParserConfigurationException 
	 * @throws Exception 
	 * @throws SAXException 
	 * @throws Exception 
	 */
	private Document document;
	@Before
	public void before() throws Exception{
		//获得dom解析工厂类
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		//得到dom解析器
		DocumentBuilder builder = factory.newDocumentBuilder();
		//解析xml文件
		document = builder.parse("src/book.xml");
	}
	
	//遍历
	@Test
	public void listXml() throws ParserConfigurationException, SAXException, Exception{
		list(document);
	}
	
	public void list(Node node){
		//打印结点的名称
		System.out.println(node.getNodeName());
		//获得全部子节点
		NodeList list = node.getChildNodes();
		for(int i=0;i<list.getLength();i++){
			Node child = list.item(i);
			//递归整个dom树
			list(child);
		}
	}
	
	//读取书名节点的值:<书名>javaweb开发</书名>
	@Test
	public void test1(){
		Document document = this.document;
		Node node = document.getElementsByTagName("书名").item(0);
		String value = http://www.mamicode.com/node.getTextContent();>


xml解析之----DOM解析