DOM解析

一、DOM(Document Object Model, 文档对象模型),在应用程序中,基于DOM的XML分析器将一个XML文档转换成一个对象模型的集合(通常称DOM树),应用程序正是通过对这个对象模型的操作,来实现对XML文档数据的操作。


二、DOM解析核心操作接口有四个:

1.Document:此接口代表了整个XML文档,表示的是整颗DOM树的根,提供了对文档中的数据进行访问和操作的入口,通过Document节点可以访问XML文件中所有的元素内容。

2.Node:此接口在整个DOM树中具有举足轻重的地位,DOM操作的核心接口中有很大一部分接口是从Node接口继承过来的。例如:Document、Element、Attri等接口。

3.NodeList:此接口表示的是一个节点的集合,一般用于表示有顺序关系的一组节点。

4.NamedNodeMap:此接口表示的是一组节点和其唯一名字对应的一一对应关系,此接口主要用于属性节点的标识上。


三、DOM解析过程:

1.建立DocumentBuilderFactory:

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

2.建立DocumentBuilder:

DocumentBuilder builder = factory.newDocumentBuilder();

3.建立Document:

Document doc = builder.parse("要读取的文件路径");

5.建立NodeList:

NodeList nl = doc.getElementsByTagName("读取节点");

6.进行XML信息读取。


四、生成XML文档:

package he.xiao.wei;

import java.io.File;

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

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;

public class BuildXML {
	public static void main(String[] args) throws Exception {
		//取得DocumentBuilderFactory类的对象
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		//取得DocumentBuilder类的对象
		DocumentBuilder builder = factory.newDocumentBuilder();
		//创建一个新的XML文档
		Document doc = builder.newDocument();
		Element addresslist = doc.createElement("addresslist");
		Element linkman = doc.createElement("linkman");
		Element name = doc.createElement("name");
		Element email = doc.createElement("email");
		//设置节点内容
		name.appendChild(doc.createTextNode("Joywy"));
		email.appendChild(doc.createTextNode("1248034855@qq.com"));
		//设置各个节点的关系
		linkman.appendChild(name);
		linkman.appendChild(email);
		addresslist.appendChild(linkman);
		doc.appendChild(addresslist);
		NodeList nl = doc.getElementsByTagName("linkman");
		TransformerFactory tf = TransformerFactory.newInstance();
		Transformer t = tf.newTransformer();
		t.setOutputProperty(OutputKeys.ENCODING, "GBK");	//处理中文
		DOMSource source = new DOMSource(doc);			//准备输出文档
		StreamResult result = new StreamResult(new File("E:" + File.separator + "Joywy.xml"));
		t.transform(source, result);	
	}
}

五、DOM解析:

 package he.xiao.wei;

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.NodeList;

public class DOMDemo {
	public static void main(String[] args) throws Exception{
		//取得DocumentBuilderFactory类的对象
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		//取得DocumentBuilder类的对象
		DocumentBuilder builder = factory.newDocumentBuilder();
		Document doc = builder.parse(new File("E:"+File.separator + "info.xml"));
		//得到所有的linkman节点
		NodeList nl = doc.getElementsByTagName("linkman");
		for(int i = 0; i < nl.getLength(); i++){
			Element e = (Element)nl.item(i);
			System.out.println(e.getElementsByTagName("name").item(0).getFirstChild().getNodeValue());
			System.out.println(e.getElementsByTagName("email").item(0).getFirstChild().getNodeValue());
		}
	}
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值