`
xiaoya629
  • 浏览: 28323 次
  • 性别: 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程序中使用dom解析xml文件介绍

    使用DOM解析XML和使用SAX解析XML

    java学习笔记——使用DOM解析XML和使用SAX解析XML

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

    学习xml——sax解析的项目小示例 非常简单易懂 而且包括多种sax解析的方法 如xmlReader,saxBuilder工厂,还包括一个dom解析的示例(DocumentBuilder工厂)

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

    adroid解析XML三种方式——源码分析,DOM,SAX,Pull,

    Java Web 开发实战经典(基础篇)

    010302_XML解析 —— DOM 010303_XML解析 —— SAX 010304_XML解析 —— JDOM 010305_XML解析 —— DOM4J 010306_使用JavaScript操作DOM 010401_Tomcat服务器的安装及配置 020501_注释及Scriptlet 020502_page指令 ...

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

    本篇文章主要介绍了Android创建与解析XML(二)——详解Dom方式 ,这里整理了详细的代码,有需要的小伙伴可以参考下。

    Android 创建与解析XML(五)——详解Dom4j方式

    本篇文章主要介绍了Android创建与解析XML(二)——详解Dom4j方式,这里整理了详细的代码,有需要的小伙伴可以参考下。

    xml入门项目——通讯录系统

    xml入门小项目——通讯录系统 系统特点: 1、系统主程序入口MainProgram.java ...系统xml文档通过dom4j技术创建和解析。 3、涉及JavaSE中的集合、泛型、接口文件及其实现类的应用等。 4、涉及junit测试方法的使用

    PHP基于DOM创建xml文档的方法示例

    本文实例讲述了PHP基于DOM创建xml文档的方法。分享给大家供大家参考,具体如下: ...1、创建DOM对象 ——》2、创建节点——》3、创建下级节点——》4、将下级节点加入到上级节点中——》5、创建属性节

    Android程序技术:个人学习助手项目习题详情显示.pptx

    DOM解析 逐行扫描XML文件,读取文件的同时即可进行解析处理,不必等到文件加载结束。缺点是无法进行增、删、改等操作。 SAX解析 一个开源的Java项目,既可以用于Android应用,也可以用于JavaEE程序。Android中已经...

    java工具类——dom4j

    dom4j是sourceforge.net上的一个开源项目,主要用于对XML的解析。

    XML文档解析相关工具

    工具内容包括java程序开发中文件配置解析需要实用的jar包工具——[dom4j-1.6.1.jar]&[jaxen-1.1-beta-6.jar]

    C#XML入门经典 C#编程人员必备的XML技能.part2

    XML概述 &lt;br&gt;2.1 XML的概念 2.1.1 XML元素 2.1.2 XML属性 2.1.3 XML解析器 2.1.4 构建XML 2.1.5 XML文档的各个组成部分 2.2 创建格式良好的XML文档 2.2.1 XML中的元素 2.2.2 XML中的属性...

    Tinyxml 源代码(VC6 & VS2005)

    简单地说,TinyXML解析一个XML文档并由此生成一个可读可修改可保存的文档对象模型(DOM)。 XML的意思是“可扩展标记语言“(eXtensible Markup Language)。它允许你创建你自己的文档标记。在为浏览器标记文档...

    比较详细的XMLDOM对象方法详解第1/2页

    范 例 xmlDocument ————————————————————————————- AppendChild 方法 作 用 加上一个节点当作指定节点最后的子节点。 基本语法 xmlDocumentNode.appendChild(newChild); 说 明 new...

    [JavaScript.DOM高级程序设计](加)桑贝斯.扫描版.part1.rar

     3.2.3 DOM 2 级   3.2.4 DOM 3 级   3.2.5 哪个级别适合你   3.3 创建示例文档   3.3.1 创建DOM文件   3.3.2 选择一个浏览器  3.4 DOM核心   3.4.1 继承在DOM中的重要性   3.4.2 核心Node...

    xerces-c++-3.1.3

    Xerces Java Parser 1.2.0支持XML 1.0,可用于建立兼容XML的网页服务器,建立下一代基于XML的垂直应用,制作XML编辑器,保证XML数据的完整性以及建立全球XML应用。 Xerces-C是用可移植的C++子集编写的XML分析器。...

    北京中科信软AJAX培训

    操纵和解析XML 选择合适的XML生成方式 XHTML与CSS XHTML、CSS与Ajax XHTML与CSS基础 XHTML语法约束 JavaScript JavaScript与Ajax JavaScript基本数据结构 JavaScript表达式和运算符 JavaScript的流程控制和函数 ...

Global site tag (gtag.js) - Google Analytics