`

xml的Dom解析

阅读更多

DOM 把 XML 文档视为一种树结构。通过这个 DOM 树,可以访问所有的元素。可以修改它们的内容(文本以及属性),而且可以创建新的元素。元素,以及它们的文本和属性,均被视为节点。

在这里介绍一下如何用java语言的dom来解析xml

 

这是需要解析的xml原文档

<?xml version="1.0" encoding="utf-8"?>
<!--加入DTD约束-->

<!DOCTYPE student SYSTEM "abc.dtd">

<student>
	<stu no="1234" num="1111">
		<name>张三丰</name>
		<sex>男</sex>
	</stu>
	<stu no="2345">
		<name>小龙女</name>
		<sex>女</sex>
	</stu>
	
</student>

 

这是相关联的dtd约束文件

<?xml version="1.0" encoding="utf-8"?>
<!ELEMENT student (stu+)>
<!ELEMENT stu (name,sex,cla)>

<!ELEMENT name (#PCDATA)>

<!ELEMENT sex (#PCDATA)>

<!ATTLIST stu
	no CDATA	#REQUIRED
	num CDATA	#IMPLIED
>

 

一、首先写一个Student类,包含其基本属性

package com.hb.dom;

/**
 * Student节点
 * @author HuangBin
 * @2014年10月7日
 */
public class Student {
	
	String name;
	String sex;
	
	int no;
	int num;
}

 二、开始解析

1、得到dom对象

在java中,我们要用到DocumentBuilderFactory类,用来产生dom解析器的工厂对象。

DocumentBuilder类,得到dom解析器

Document类,得到解析之后的dom对象

String path = "student.xml";
// 产生DOM解析器的工厂对象
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
// 得到DOM解析器的对象
DocumentBuilder builder = factory.newDocumentBuilder();
// 解析xml文件或者数据流,得到DOM对象
Document doc = builder.parse(path);

 2、提取中间的元素

        /**
	 * 递归解析xml的方法
	 * 
	 * @param doc
	 */
	public static void getData(Node doc) {
		NodeList list = doc.getChildNodes();
		for (int i = 0; i < list.getLength(); i++) {
			Node node = list.item(i);
			String name = node.getNodeName();

			if (name.equals("stu")) {
				stu = new Student();
				DomParse.list.add(stu);
				NamedNodeMap map = node.getAttributes();
				for (int j = 0; j < map.getLength(); j++) {
					Node nodeItem = map.item(j);
					String attName = nodeItem.getNodeName();
					String attVal = nodeItem.getNodeValue();
					if (attName.equals("no")) {
						stu.no = Integer.parseInt(attVal);
					} else if (attName.equals("num")) {
						stu.num = Integer.parseInt(attVal);
					}
				}
			} else if (name.equals("name")) {
				stu.name = node.getTextContent();
			} else if (name.equals("sex")) {
				stu.sex = node.getTextContent();
			}
			getData(node);
		}
	}

 

3、打印测试

for (Student stu : list) {
	System.out.println(stu.name + " " + stu.sex + " " + stu.no + " "
			+ stu.num);
}

 

运行结果为

张三丰 男 1234 1111

小龙女 女 2345 0

 

三、xml中新增元素

1、修改原有元素子元素

NodeList nodeList = doc.getElementsByTagName("name");
Node n = nodeList.item(1);
Text text = doc.createTextNode("哦哈哈");
n.appendChild(text);

 2、修改原有元素属性

NodeList nodeList2 = doc.getElementsByTagName("stu");
Node n2 = nodeList2.item(1);
Attr att = doc.createAttribute("num");
att.setValue("123123");
Element element = (Element) n2;
element.setAttributeNode(att);

 3、增加元素

		// 得到节点
		Node n3 = doc.getLastChild();
		// 创建元素
		Element e1 = doc.createElement("stu");
		// 增加属性
		Attr atr = doc.createAttribute("no");
		atr.setValue("12343");
		e1.setAttributeNode(atr);
		// 增加属性
		Attr atrr = doc.createAttribute("num");
		atrr.setValue("111");
		e1.setAttributeNode(atrr);

		// 增加子元素
		Element ele1 = doc.createElement("name");
		ele1.setTextContent("新人");
		e1.appendChild(ele1);

		// 增加子元素
		Element ele2 = doc.createElement("sex");
		ele2.setTextContent("男");
		e1.appendChild(ele2);

		// 将元素加到节点
		n3.appendChild(e1);

 

4、保存到文件中

		// 创建一个用来转换DOM对象的转换器工厂对象
		TransformerFactory tff = TransformerFactory.newInstance();
		// 获得转换器对象
		Transformer tf = tff.newTransformer();
		// 定义要转换的源对象
		DOMSource xml = new DOMSource(doc);
		// 定义转换的目标文件
		StreamResult result = new StreamResult(new File("student2.xml"));

		// 开始转换
		tf.transform(xml, result);

 5、将新的xml解析并打印测试

		// 获得doc中的数据
		getData(doc);
		// 遍历打印
		for (Student stu : list) {
			System.out.println(stu.name + " " + stu.sex + " " + stu.no + " "
					+ stu.num);
		}

 运行结果为:

张三丰 男 1234 1111

小龙女哦哈哈 女 2345 123123

新人 男 12343 111

 

文件:

 

1
0
分享到:
评论

相关推荐

    XMLDOM解析器

    在C#中,XML DOM解析器主要通过`System.Xml`命名空间中的类来实现,如`XmlDocument`、`XmlNode`等。下面我们将深入探讨这些知识点: 1. **XMLDocument类**:这是DOM解析的核心,它代表整个XML文档。你可以使用`Xml...

    Oracle xmldom解析xml入参

    完整的Oracle xmldom解析xml入参,经过测试,可以解析,成功入到数据表中。

    IE下使用XML DOM解析XML文件(ASP.NET Web)

    总结,IE下的XML DOM解析涉及使用ActiveXObject创建DOM对象,加载XML文件,然后通过DOM API遍历和操作XML结构。在ASP.NET Web环境中,通常需要结合服务器端和客户端代码协同工作,确保数据的正确传输和解析。理解并...

    FireFox下用XML DOM解析XML文档(ASP.NET Web)

    本文将详细讲解如何在Firefox下利用XML DOM解析XML文档。 首先,理解XML DOM的概念是至关重要的。XML DOM是一种W3C标准,它定义了一个统一的、平台和语言无关的接口,允许程序和脚本动态地访问和更新XML文档的结构...

    Asp xmldom解析XML

    XMLDOM提供了一种标准的方式来解析、修改和操作XML数据,它遵循W3C DOM规范。在这个示例中,我们将深入探讨如何在ASP中使用XMLDOM对象解析XML文件。 首先,我们需要了解XMLDOM的主要组成部分。XMLDOM主要包括以下几...

    易语言模块 XMLDOM 解析 构造 获取 更改 添加 删除 遍历元素 格式化XML

    示例源码: ...什么是 XML DOM? XML DOM 是: 用于 XML 的标准对象模型 用于 XML 的标准编程接口 中立于平台和语言 W3C 标准 XML DOM 定义了所有 XML 元素...5、XMLDOM教程文档推荐参考:https://www.w3cschool.cn/xmldom

    xmldom解析

    在这个主题中,“xmldom解析”主要涉及在服务器端和客户端使用DOM解析XML数据的技术。 1. **DOM解析原理**: - DOM解析器将XML文档转化为内存中的树形结构,称为DOM树。每个节点代表XML文档的一部分,如元素、属性...

    XML DOM解析方法手册,中文,CHM格式

    这个“XML DOM解析方法手册”以中文CHM格式提供,旨在帮助开发者深入理解并有效地利用XML DOM进行编程。 在XML DOM中,每个XML元素、属性、文本节点等都有对应的对象,这些对象构成了一个树形结构,即DOM树。DOM...

    Android Dom解析XML

    DOM解析方式允许开发者一次性加载整个XML文档到内存中,形成一个树形结构,便于遍历和操作。尽管对于大型XML文件,DOM解析可能因消耗大量内存而效率低下,但在处理小型XML文件时,DOM方法具有简洁和方便的优点。 ...

    android Dom解析xml文件

    DOM解析器将整个XML文档加载到内存中,形成一个树形结构,允许开发者通过节点操作来访问和修改XML内容。本篇文章将深入探讨Android中的DOM解析XML文件,包括其基本原理、实现步骤和一些实用技巧。 ### 1. DOM解析的...

    xml dom解析器

    xml的ppt文档,简要介绍dom解析器

    xml.dom解析实例(java)

    在Java中,DOM解析主要通过`javax.xml.parsers`包中的`DocumentBuilderFactory`和`DocumentBuilder`类来实现。以下是一个简单的XML DOM解析实例: 首先,我们需要导入必要的库: ```java import javax.xml.parsers...

    PB 解析XML (代码案例)

    10. **性能优化**:处理大量XML数据时,要注意性能优化,例如,合理使用缓存,避免不必要的遍历操作,以及选择合适的解析方式(SAX或DOM)。 通过以上步骤和知识点,开发者能够在PowerBuilder环境中有效地读取、...

    xmldom4j解析

    DOM解析会将整个XML文档加载到内存中形成一棵树形结构,方便访问任意节点,但内存消耗大;SAX解析则采用事件驱动,逐行读取XML,适合处理大型文档,但不支持随机访问。 三、DOM4J解析XML 1. 创建Document对象:使用...

    DOM解析XML 创建XML

    下面我们将深入探讨DOM解析XML以及如何创建XML。 DOM解析XML的过程分为以下几个步骤: 1. **加载XML文档**:首先,我们需要通过DOM解析器加载XML文档。在JavaScript中,可以使用`DOMParser`对象的`parseFromString...

    xmldom.zip

    这个问题的出现主要是因为Egret引擎默认不包含XML解析的支持,因此需要额外引入XMLDOM库来解决。本文将深入探讨如何处理这个情况,以及XMLDOM在Egret中的应用。 XML(Extensible Markup Language)是一种用于存储和...

    DOM解析XML文件例子

    在这个例子中,我们将深入探讨如何使用DOM解析XML文件,以理解和掌握XML文档的结构,并进行数据提取、修改和创建。 首先,XML(Extensible Markup Language)是一种标记语言,用于存储和传输数据,具有自描述性和...

    xml.rar_Csharp xml_DOM_xml_xml csharp_解析xml

    在C#中,System.Xml命名空间提供了XmlDocument类来实现DOM解析。以下是一个基础的XML DOM解析过程: 1. 加载XML文件:首先,我们需要加载XML文件到内存中。使用XmlDocument的Load方法可以完成这一操作。例如: ```...

    java_dom解析xml xml java

    标题“java_dom解析xml xml java”表明了本文档的主题是关于如何使用Java中的DOM技术来解析XML文件。 #### 描述分析 描述中提到这是一个适合新手入门的内容,并给出了一个简单的XML示例。该XML文档包含了一个`...

Global site tag (gtag.js) - Google Analytics