`
xiaoya629
  • 浏览: 29568 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

DOM解析XML——完整(2)

    博客分类:
  • java
阅读更多

在网上search了很多DOM解析XML的代码,总觉得不好,主要原因是都有这样的代码:

document.getElementsByTagName("tagName"); 

我希望能有一个对XML标签名没有限定的处理逻辑,只需要传入XML文件的路径,即可对此XML进行解析。一直找不到,就自己手写了一个。

 

DOM解析有三点是很重要的,可能我的描述并不准确,因为我是在debug过程中分析出来的,并没有去参看DOM的文档。

 

  1. DOM将回车(换行符)和节点内容(Value)都是作为节点来解析的。
  2. 因为第一点,DOM将节点进行了分类,主要是有两类:TEXT_NODE ,ELEMENT_NODE,通过对节点的类型判断,可以很好的解析和过滤所有的节点。
  3. DOM在获取TETX_NODE类型的节点的内容时,如果是回车(换行符),解析后的内容是由一个或多个的"\n","\t"组成的字符串,而内容(Value)节点解析后的则就是其值,不含"\n","\t"。

明白了这三点就可以很容易的对XML进行解析。

此代码适用于各种XML的格式,直排,竖排,乱排。

注意:XML的排版方式不同,解析效果是不一样的,此代码适用任意的排版方式

OK,上代码:

package ryan.xiao.javaSE.OOP;

import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

import java.io.File;
import java.io.IOException;

public class XMLDemo1 {
	public static void main(String args[]) throws ParserConfigurationException, SAXException, IOException{
		DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
		DocumentBuilder builder = builderFactory.newDocumentBuilder();
		Document document = builder.parse(new File("E:" + File.separator+ "java3" + File.separator + "XMLTest" + File.separator
				+ "test.xml"));
		NodeList nodeList = document.getChildNodes(); //只有一个元素,且是根节点
		NodeList rootNodeList = nodeList.item(0).getChildNodes();  //得到根节点下所有的第一级子节点
		fun(rootNodeList);
	}

	/**
	 * 解析方法,传递一个NodeList进去
	 * @param document
	 */
	private static void fun(NodeList nodeList) {
		for (int i = 0; i < nodeList.getLength(); i++) {
			Node nodeTemp = nodeList.item(i);
			if(nodeTemp.hasAttributes()){
				NamedNodeMap nodeAttrList = nodeTemp.getAttributes();  //获得node的属性
				for(int j = 0;j<nodeAttrList.getLength();j++){
					Node nodeAttr = nodeAttrList.item(j);
					System.out.print(nodeTemp.getNodeName()+ "节点有属性:");
					System.out.println(nodeAttr);
					System.out.println("属性值为:" + nodeAttr.getNodeValue());
				}
			}
			short typeTemp = nodeTemp.getNodeType();
			if (typeTemp == 1) { 	// 是"ELEMENT_NODE"
				if (nodeTemp.hasChildNodes()) { 	// 如果此元素节点还有子节点
					fun(nodeTemp.getChildNodes());
				} else {
					// 无子节点,表示此节点中无内容类似于:<item></item>
					System.out.println("此节点无内容" + nodeTemp.getNodeName());
				}
			} else { 	// 是换行或是内容节点
				String str = nodeTemp.getTextContent().replace("\n", "");
				str = str.replace("\t", "");
				if (!(str.equals(""))) { 	// 过滤有内容的节点
					System.out.print(nodeTemp.getParentNode().getNodeName()+ ":");
					System.out.println(nodeTemp.getNodeValue().trim());
				}
			}
		}
	}
}

 

<?xml version="1.0"?>
<info>
	<item>
		<image>assets/icons/bi.jpg</image>
	</item>
	<item>
		<image>assets/icons/ai.jpg</image>
	</item>
	<item>
		<image>assets/icons/ci.jpg</image>
	</item>
	<item>
		<image>assets/icons/fw.jpg</image>
	</item>
	<item>
		<image>assets/icons/ew.jpg</image>
	</item>
	<item>
		<image>assets/icons/air.jpg</image>
	</item>
</info>
分享到:
评论
1 楼 红袖添香夜半读 2012-11-18  
很好,对我帮助很大,谢谢分享。

相关推荐

    java解析xml——dom

    ### Java解析XML——DOM详解 #### 一、DOM解析概念 **Document Object Model (DOM)**是一种平台和语言中立的接口,它允许程序和脚本动态地访问和更新文档的内容、结构和样式。DOM最初是为HTML设计的,但后来也被...

    XML解析器————

    例如,对于DOM解析,可以创建`DOMParser`实例,然后使用`parse()`方法解析XML文档;对于SAX解析,可以实现`ContentHandler`接口,并注册到`SAXParser`中。同时,可以通过`XMLSchemaValidator`进行XML Schema验证。 ...

    sax,dom解析xml和生产xml文件

    以下是DOM解析XML的基本流程: 1. 加载`DocumentBuilderFactory`,并设置解析器特性。 2. 使用`DocumentBuilderFactory`创建`DocumentBuilder`实例。 3. 调用`DocumentBuilder`的`parse()`方法解析XML文件,得到`...

    Android创建与解析XML(二)——详解Dom方式

    在DOM解析过程中,首先要导入一系列与XML处理相关的包。这些包包括: 1. javax.xml.parsers:这个包包含了用于解析XML的DocumentBuilder和DocumentBuilderFactory类。 2. javax.xml.transform:包含了用于转换XML...

    DOM解析(csdn)————程序.pdf

    使用DOM解析XML文件时,首先需要加载XML文档到内存,然后通过DOM API创建Document对象。接着,可以通过Document对象的`getElementsByTagName`等方法找到特定的元素,进而操作它们的属性或子元素。例如,我们可以查找...

    xml——————表单资源

    DOM解析器将整个XML文档加载到内存中,形成一个树形结构,便于随机访问;SAX解析器采用事件驱动的方式,逐行处理XML,占用内存少,适用于大文件;StAX则提供了一个流式接口,允许程序按需读取或写入XML。 此外,...

    dom4j---xml解析jar包

    在Java环境中,解析XML文档时,我们通常会遇到各种库,其中DOM4J是一个非常流行的、功能强大的开放源代码库。这个库不仅简化了XML处理,还提供了XPath和XSLT的支持,使其成为Java开发者处理XML的首选工具之一。 **...

    用dom4j解析xml文件

    本篇文章将深入探讨如何使用DOM4J来解析XML文件,以及通过示例代码来展示其基本操作。 首先,我们需要理解DOM4J的工作原理。DOM4J采用的是DOM(Document Object Model)模型,它将整个XML文档加载到内存中形成一棵...

    XML——sax解析 极速入门易懂示例

    除了SAX解析,你提到的还有DOM解析。DOM(Document Object Model)是另一种常用的XML解析方式,它将整个XML文档加载到内存中形成一个树形结构,便于遍历和操作。`DocumentBuilder`工厂是JAXP的一部分,可以用来创建`...

    Android之PULL解析XML文件——新浪微博客户端首页效果

    在本主题"Android之PULL解析XML文件——新浪微博客户端首页效果"中,我们将深入探讨如何利用PULL解析器(PullParser)来处理XML数据,从而实现类似新浪微博客户端首页的动态效果。这种效果通常包括新闻标题、摘要、...

    Android XML解析—— Pull解析XML(待完善)

    XML Pull解析器(XML Pull Parser)是一种事件驱动的解析模型,它不需要完整的XML文档加载到内存中,而是通过读取XML文档的下一个事件(如开始元素、结束元素、文本等)来进行解析。这种解析方式非常适合资源有限的...

    解析xml的jar包

    解析XML是将XML文档转换为程序可以理解的数据结构的关键步骤。本文将深入探讨XML解析的基本概念、常用方法以及相关的Java库——JDOM。 XML文档由一系列元素构成,每个元素都包含标签、属性和内容。解析XML的过程...

    xmldom

    在这个chm格式的文件“XMLDOM对象方法手册”中,很显然包含了关于XMLDOM核心对象——XMLDocument的所有方法和属性的详尽指南。 XMLDocument对象是XMLDOM的核心,它是整个XML文档的根节点,代表了一个完整的XML文件...

    xml数据前后台解析:jdom与dom4j源码,程序可以跑

    本文将深入探讨XML数据在前后台解析的过程中,重点介绍两种主流的Java XML解析库——JDOM和DOM4J,并提供实际运行的程序示例。同时,我们还会讨论如何使用jQuery在前端解析XML并展示数据。 首先,让我们了解XML的...

    使用java解析XML文件,解析完之后将解析结果导入mysql数据库中

    在Java编程环境中,解析XML文件是一项常见的任务,特别是在数据处理和集成中。XML(Extensible Markup Language)是一种结构化数据格式,广泛用于存储和传输数据。本教程将介绍如何使用Java解析XML文件,并将解析...

    VTD-XML 不同于SAX和DOM的XML高效解析器

    DOM解析器将整个XML文档加载到内存中,形成一个树形结构,每个节点代表XML文档的一部分。DOM提供了一个完整的文档视图,方便进行遍历和操作,但对内存需求较高,不适合处理大文件。 总结起来,VTD-XML是介于SAX和...

    Dom4J解析XML

    **标题解析:** "Dom4J解析XML" 这个标题明确指出了我们要讨论的核心技术——使用Dom4J库来解析XML文档。Dom4J是一个Java库,它提供了丰富的API来处理XML,包括读取、写入、修改以及查询XML文档。在本文中,我们将...

    python解析xml文件

    本文将详细介绍如何使用两种流行的方法——`MiniDom`和`ElementTree`来解析XML文件。 #### 1. 通过 MiniDom 库解析 XML 文件 `MiniDom`是Python标准库中的一部分,它提供了DOM(Document Object Model)接口,允许...

    adroid解析XML三种方式——源码分析

    Android中的`org.w3c.dom`包提供了DOM解析的相关API,如`DocumentBuilderFactory`用于创建`DocumentBuilder`,`DocumentBuilder`则可以解析XML文件并生成`Document`对象。 2. SAX解析: SAX(Simple API for XML)...

    安卓Android源码——xml-dom201311060201.rar

    - **优点**:DOM解析提供了对XML的完整结构,可以方便地进行任意位置的修改,适合处理小规模的XML文件。 - **缺点**:由于整个XML文件被加载到内存,对于大文件,可能会消耗大量内存,且解析速度较慢。 5. **优化...

Global site tag (gtag.js) - Google Analytics