xml解析之DOM

DOM Document Object Model 文档对象模型

 

如果一个程序需要进行DOM解析读操作的话,需要按照如下的步骤进行

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

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

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

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

   进行xml信息读取。

要解析文件——d:\dom_demo_02.xml

<?xml version="1.0" encoding="GBK"?>
<addresslist>
	<name>张三</name>
</addresslist>

读取结点: 

public class DOMDemo01 {
	public static void main(String[] args) {
		// 1、建立DocumentBuilderFactory,以用于取得DocumentBuilder
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		// 2、通过DocumentBuilderFactory取得DocumentBuilder
		DocumentBuilder builder = null;
		try {
			builder = factory.newDocumentBuilder();
		} catch (ParserConfigurationException e) {
			e.printStackTrace();
		}
		// 3、定义Document接口对象,通过DocumentBuilder类进行DOM树的转换操作
		Document doc = null;
		try {
			// 读取指定路径的xml文件
			doc = builder.parse("D:" + File.separator + " dom_demo_02.xml");
		} catch (Exception e) {
			e.printStackTrace();
		}
		// 4、查找name的节点
		NodeList nl = doc.getElementsByTagName("name");
		// 5、输出NodeList中第一个子节点中文本节点的内容
		System.out.println("姓名:" + nl.item(0).getFirstChild().getNodeValue());
	}
}

定义要解析的XML文件  d:\dom_demo_02.xml:

<?xml version="1.0" encoding="GBK"?>
<addresslist>
	<linkman>
		<name>张三</name>
		<email>[email protected]</email>
	</linkman>
	<linkman>
		<name>MLDN</name>
		<email>[email protected]</email>
	</linkman>
</addresslist>
public class DOMDemo01 {
	public static void main(String[] args) {
		// 1、建立DocumentBuilderFactory,以用于取得DocumentBuilder
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		// 2、通过DocumentBuilderFactory取得DocumentBuilder
		DocumentBuilder builder = null;
		try {
			builder = factory.newDocumentBuilder();
		} catch (ParserConfigurationException e) {
			e.printStackTrace();
		}
		// 3、定义Document接口对象,通过DocumentBuilder类进行DOM树的转换操作
		Document doc = null;
		try {
			// 读取指定路径的xml文件
			doc = builder.parse("D:" + File.separator + " dom_demo_02.xml");
		} catch (Exception e) {
			e.printStackTrace();
		}
		// 4、查找linkman的节点
		NodeList nl = doc.getElementsByTagName("linkman");
		// 5、输出NodeList中第一个子节点中文本节点的内容
		for (int x = 0; x < nl.getLength(); x++) {	// 循环输出节点内容
			Element e = (Element) nl.item(x) ;// 取得每一个元素
			System.out.println("姓名:" + e.getElementsByTagName("name").item(0).getFirstChild().getNodeValue());
			System.out.println("邮箱:" + e.getElementsByTagName("email").item(0).getFirstChild().getNodeValue());
                               }
	}
}

生成XML文件:

public class DOMDemo01 {
	public static void main(String[] args) {
		// 1、建立DocumentBuilderFactory,以用于取得DocumentBuilder
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		// 2、通过DocumentBuilderFactory取得DocumentBuilder
		DocumentBuilder builder = null;
		try {
			builder = factory.newDocumentBuilder();
		} catch (ParserConfigurationException e) {
			e.printStackTrace();
		}
		// 3、定义Document接口对象,通过DocumentBuilder类进行DOM树的转换操作
		Document doc = null;
		doc = builder.newDocument();	// 创建一个新的文档
		// 4、建立各个操作节点
		Element addresslist = doc.createElement("addresslist") ;// 建立节点
		Element linkman = doc.createElement("linkman") ;	// 建立节点
		Element name = doc.createElement("name") ;		// 建立节点
		Element email = doc.createElement("email") ;		// 建立节点
		// 5、设置节点的文本内容,即:为每一个节点添加文本节点
		name.appendChild(doc.createTextNode("张三")) ;		// 设置文本
		email.appendChild(doc.createTextNode("[email protected]")) ;// 设置文本
		// 6、设置节点关系
		linkman.appendChild(name) ;			// 子节点
		linkman.appendChild(email) ;			// 子节点
		addresslist.appendChild(linkman) ;			// 子节点
		doc.appendChild(addresslist) ;			// 文档上保存节点
		// 7、输出文档到文件之中
		TransformerFactory tf = TransformerFactory.newInstance();
		Transformer t = null;
		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);
	}
}

相关推荐