Java XML解析之DOM

DOM解析是官方提供的XML解析方式之一,使用时无需引入第三方包,代码编写简单,方便修改树结构,但是由于DOM解析时是将整个XML文件加载到内存中进行解析,因此当XML文件较大时,使用DOM解析效率会降低,而且可能造成内存溢出。

当XML文件较大时应采用SAX解析(下一篇中会介绍)。通常情况下,若XML文件只是用作系统的配置文件,文件一般不会很大,使用DOM解析基本就能解决问题。

以下分别是解析和生成xml的基本步骤:

1. XML解析:

上文已经说过DOM解析时是将整个XML文件加载到内存中,所以解析的第一步就是加载文件,需要用到以下代码:

1 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
2 DocumentBuilder builder = factory.newDocumentBuilder();
3 Document document = builder.parse(in);// 参数有多种类型,在此例中选择的是InputStream类型的参数

这三行代码分别是创建解析器工厂,创建解析器,获取解析的XML文档树,之后就可以对document对象进行具体的操作。

其中的主要操作大概有以下几种:

1 Element root = document.getDocumentElement();// 获取文档的根节点
2 NodeList nodeList = document.getElementsByTagName("nodename");// 根据节点名称获取节点列表

然后再循环遍历nodeList中的节点,利用节点对象的getChildNodes()的方法获取子节点列表,直到取到所需要的节点。

解析注意点:

Dom解析会将xml中两个标签之间的所有内容都看成是子节点,包括空白,其中节点类型分为:

1. 带有标签的子节点看成Element类型的子节点

2. 不包含标签的空白子节点或者文字节点看成是text类型的子节点

获取节点值时,必须获取text类型的节点的值,而不是Element类型节点的值,Element节点的值永远都是null,也可以使用Element节点的getTextContent()来获取Element类型的节点值

所以,在遍历子节点时,需要做 nodeList.item(i).getNodeType() == Element.ELEMENT_NODE 这样的一次判断,若为true,则执行 nodeList.item(i).getTextContent() 来获取节点的值。

2. XML生成:

首先是创建一个Document对象,需要用到以下代码:

1 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
2 DocumentBuilder builder = factory.newDocumentBuilder();
3 Document document = builder.newDocument();

然后是document对象的配置以及节点的创建和添加:

1 document.setXmlStandalone(true); //非必须配置,配置之后可以去除不必要的standalone属性
2 Element root = document.createElement("nodes"); // 创建文档根节点
3 document.appendChild(root);// 将根节点加入文档中

创建子节点,添加id属性,并加入根节点中,xml中节点的父子关系是通过节点的appendChild方法形成的。

1 Element node = document.createElement("node");// 创建子节点
2 node.setAttribute("id", "1"); // 为子节点添加属性
3 root.appendChild(node); // 将子节点加入到根节点中

当节点设置完成之后需要将document对象转换成xml文件,需要通过以下代码转换:

1 TransformerFactory factory = TransformerFactory.newInstance(); // 工厂类,用来获取转换对象
2 Transformer transformer = factory.newTransformer(); // 获取用于转换的对象
3 transformer.setOutputProperty(OutputKeys.INDENT, "yes"); // 设置文档自动换行
4 transformer.transform(new DOMSource(document), new StreamResult( new File("E:\\nodes.xml")));// 实现转换,需要将转换的源对象与目标文件包装一下

至此,通过DOM完成了XML文件的生成。

DOM解析与创建XML的基本步骤也就是以上这么多,这是我学习之后的总结,希望对需要学习这方面知识的朋友能有些许帮助。

时间: 2025-01-02 15:26:48

Java XML解析之DOM的相关文章

java xml解析方式(DOM、SAX、JDOM、DOM4J)

XML值可扩展标记语言,是用来传输和存储数据的. XMl的特定: XMl文档必须包含根元素.该元素是所有其他元素的父元素.XML文档中的元素形成了一颗文档树,树中的每个元素都可存在子元素. 所有XML元素都必须有关闭标签. XML标签对大小写敏感,并且所有属性值date都需加引号. XML元素: XMl元素是只从包括开始标签到结束标签的部分,元素可包含其他元素.文本或两者都包含,也可拥有属性. XML解析 基础方法:DOM.SAX DOM解析:平台无关的官方解析方式 SAX解析:Java中基于事

java XML解析

package com.kpsh.myself; import java.io.File;import java.io.FileInputStream;import java.util.List; import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory; import org.dom4j.Document;import org.dom4j.DocumentHelper;imp

Java XML解析技术

XML现在已经成为一种通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成与交互带来了极大的方便.XML在不同的语言里解析方式都是一样的,只不过实现的语法不同而已.基本的解析方式有两种,一种叫SAX,另一种叫DOM. DOM的全称是Document Object Model,也即文档对象模型.在应用程序中,基于DOM的XML分析器将一个XML文档转换成一个对象模型的集合(通常称DOM树),应用程序正是通过对这个对象模型的操作,来实现对XML文档数据的操作.通过DOM接口,应用程

Java xml 解析

1. XML框架结构 Java SE 6 平台提供的 XML 处理主要包括两个功能:XML 处理(JAXP,Java Architecture XML Processing)和 XML 绑定(JAXB,Java Architecture XML Binding). JAXP 包括 SAX 框架 —— 遍历元素,做出处理:DOM 框架 —— 构造 XML 文件的树形表示:StAX 框架 —— 拖拽方式的解析:XSLT 框架 —— 将 XML 数据转换成其他格式.JAXB 则是负责将 XML 文件和

Android Xml解析之DOM详细攻略

参考地址:http://wenku.baidu.com/view/aca83d12cc7931b765ce15d1.html 由于dom方式是保存于内存中,比较耗内存,不过对于一些数据量比较小但又比较常用的隐秘信息,可以用此方法 People类是自己写的一个类,主要保存各个字符串数据. 1.为了具有扩展性 自己编了一个xml文件: <?xml version="1.0" encoding="utf-8"?> <peoples> <peo

Java数据库编程及Java XML解析技术

1.JDBC概述 A.  什么是JDBC? Java DataBase Connectivity:是一种用于执行SQL语句的Java API,它由一组用Java语言编写的类和接口组成.通过这些类和接口,JDBC把SQL语句发送给不同类型的数据库进行处理并接收处理结果 B.  JDBC的常用类和接口:DriverManager类, Connection接口, Statement接口, PreparedStatement接口, ResultSet接口 2.JDBC编程步骤 1). 加载驱动程序 Cl

XML解析中DOM解析如何使用第三方的类库

* DOM解析使用Google提供的一个开源高效的XML解析工具GDataXMLNode,他的效果要比NSXMLParser要快10倍 使用方式: 1:先倒入系统动态链接库 libxml2.2.dylib 在项目的Targets – Summary – Linked Frameworks and Libraries或者在Targets – Build Phases – Link Binary With Libraries添加libxml2.2.dylib 2:在bulidSettings中的He

XML解析之DOM ,SAX解析区别

环境配置:导入GDataXMLNode.h 文件 1.导入GDataXMLNode.h 文件时,需要导入动态库 libxml2.2.tbd 动态库 , 2.再在Build setting下面找到 Header Search Paths ,插入 /usr/include/libxml2 3. 最后在Build Phases中的Compile Sources 下找到GDataXMLNode.m文件,在后面加上 -fno-objc-arc  因为这个三方是MRC环境的 SAX解析和DOM解析的区别:

xml解析之----DOM解析

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