您的位置:首页 > 编程语言 > Java开发

Java解析XML文件的四种方式之DOM解析

2014-06-28 11:11 351 查看
DOM解析:

DOM解析是将xml文件全部载入到内存中,组装成一颗dom树, 然后通过节点以及节点之间的关系来解析xml文件。

当文档较大或结构复杂时,对内存需求较高,且效率不高。但DOM解析操作是基础,应该尽可能地掌握。

在DOM解析中,每一个节点中的内容实际上都是一个单独的文本节点

核心接口:

org.w3c.dom.Node:Document、Element、Attr等接口都是从该接口继承而来,在DOM树中,每一个Node接口代表一个节点

org.w3c.dom.Document:代表整个XML文档,表示整棵DOM树的根,提供了对文档数据访问和操作的入口,可访问所有元素内容

org.w3c.dom.NodeList:表示一个节点的集合

org.w3c.dom.NamedNodeMap:主要用于属性节点的表示

javax.xml.parsers.DocumentBuilderFactory

javax.xml.parsers.DocumentBuilder

javax.xml.transform.TransformerFactory:用于取得 一个Transformer类的实例对象

javax.xml.transform.Transformer:通过此类完成内容输出

javax.xml.transform.dom.DOMSource:用于接收Document对象

javax.xml.transform.stream.StreamResult:用于指定要使用的输出流对象,可以向文件输出,也可以向指定的输出流输出

如果程序需要进行DOM解析读取操作,需按以下步骤进行:

建立DocumentBuilderFactory:DocumentBuilderFactory
factory =
DocumentBuilderFactory.newInstance();

建立DocumentBuilder:DocumentBuilder
builder = factory.newDocumentBuilder();

建立Document:Document
doc = builder.parse("xml文件路径");

建立NodeList:NodeList
nl = doc.getElementsByTagName("节点名称");

进行信息读取。

如果需要使用DOM进行XML文件输出操作,需要使用DOM操作中提供的各个接口并手工设置各个节点的关系:

// 取得DocumentBuilderFactory类的对象
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance() ;
		// 取得DocumentBuilder类的对象
		DocumentBuilder build = factory.newDocumentBuilder()  ;
		Document doc = build.newDocument() ;	// 创建一个新的XML文档
		Element addresslist = doc.createElement("addresslist") ;
		Element linkman = doc.createElement("linkman") ;
		Element name = doc.createElement("name") ;
		Element email = doc.createElement("email") ;
		// 设置节点内容
		name.appendChild(doc.createTextNode("Java解析")) ;
		email.appendChild(doc.createTextNode("test@163.com")) ;
		// 该设置各个节点的关系
		linkman.appendChild(name) ;	// name是linkeman的子节点
		linkman.appendChild(email) ;	// email是linkman的子节点
		addresslist.appendChild(linkman) ;
		doc.appendChild(addresslist) ;
		TransformerFactory tf = TransformerFactory.newInstance() ;
		Transformer t = tf.newTransformer() ;
		t.setOutputProperty(OutputKeys.ENCODING, "GBK")  ;	// 处理中文的
		DOMSource source = new DOMSource(doc) ;	// 准备输出文档
		StreamResult result = new StreamResult(new File("d:"+File.separator+"output.xml")) ;
		t.transform(source,result) ;

通过上面的代码可以发现,在XML创建中所有的节点(Element)都是通过Document接口创建的,

在创建时本身并没有定义任何父子节点关系,而是通过appendChild(Node newChild)方法设置的,

而且根节点addresslist也要加在Document中,这样才能完成整个一棵DOM树。

输出的文档并不会考虑格式的换行,实际使用中,格式无任何作用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: