`
yjshengshe
  • 浏览: 201896 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

dom解析xml详解

    博客分类:
  • java
 
阅读更多

 

 解析xml并打印出所有的属性名称和文本内容

 

1 test-a.xml文件

 

<?xml version="1.0" encoding="UTF-8"?>
	<result>
			<man>
				<name>sky</name>
				<age>18</age>
				<sex>1</sex>
			</man>
	</result>

 

 2 java dom访问,主要功能是遍历xml文件并按层次打印出所有的节点名称和文本内容

package com.java.xml.dom;

	import java.io.File;

	import javax.xml.parsers.DocumentBuilder;
	import javax.xml.parsers.DocumentBuilderFactory;

	import org.w3c.dom.Document;
	import org.w3c.dom.Node;
	import org.w3c.dom.NodeList;

	/**
	 * DOM是以层次结构组织的节点或信息片段的集合。
	 * 分析该结构通常需要	加载整个文档和构造层次结构。
	 * 由于它是基于层次结构的,因而DOM被认为是基于树或基于对象的。
	 * 优点:
	 * 因为DOM树是加载到内存中的,修改比较方便。
	 * 支持删除、修改、重新排列等多种功能
	 * 缺点:
	 * 将整个文档调入内存(包括无用的节点),浪费时间和空间;
	 * 使用场合:一旦解析了文档还需多次访问这些数据;硬件资源充足(内存、CPU)。
	 * @author Administrator
	 *
	 */
	public class DomA {
		
		/**
		 * 控制台输出类
		 * @param s 要输出的字符
		 * @param level 层次
		 */
		public static void print(String s,int level)
		{
			String result = "";
			
			for (int i = 0; i <level ;i++)
			{
				result = result + "----";
			}
			
			result = "level:"+level+":"+result + s;
			
			System.out.println(result);
		}

		/**
		 * 循环解析xml对象的方法
		 * @param list
		 */
		public static void circle(NodeList list,int level)
		{
			
			NodeList childList = null;
			
			for (int i = 0; i < list.getLength(); i++)
			{
				int newLevel = level;
				
				Node node = list.item(i);
							
				/**
				 * 如果是文本对象直接输出 
				 * 忽略空白文本,dom解析时,getChildNodes会生成空白Node	
				 */
				if (Node.TEXT_NODE == node.getNodeType() && !("").equals(node.getNodeValue().trim()))
				{
					newLevel = newLevel + 1;
					
					print(node.getNodeValue()+"",newLevel);
				}
				
				//如果是对象类型
				if (Node.ELEMENT_NODE == node.getNodeType())
				{
					newLevel = newLevel + 1;
					
					print(node.getNodeName()+"",newLevel);
					
					childList = node.getChildNodes();
					
					//继续循环
					circle(childList,newLevel);
					
				}	
			}
		}
		/**
		 * dom解析
		 */
		public static void dom()
		{
			try 
			{
				File xml = new File("D:/新的开始/学习笔记/java学习/xml解析/test-a.xml");
				DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
				DocumentBuilder builder = factory.newDocumentBuilder();
				Document doc = builder.parse(xml);
				
				//doc根对象	
				Node root = doc.getDocumentElement();
				
				//根节点子对象集合
				NodeList list = root.getChildNodes();
		
				circle(list,0);
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		/**
		 * @param args
		 */
		public static void main(String[] args) {
			// TODO Auto-generated method stub
			
			dom();
			
		}

	}
 

 3 执行DomA对象的main方法,输出如下:

 

level:1:----man
level:2:--------name
level:3:------------sky
level:2:--------age
level:3:------------18
level:2:--------sex
level:3:------------1

 4 注意点:

 

dom解析getChildNodes会生成空白Node,解析时需要注意。

举例1 :

 

<result>
	<man>
		<name>sky</name>
		<age>18</age>
		<sex>1</sex>
	</man>
</result>

 

//doc根对象	
		Node root = doc.getDocumentElement();
		
		//根节点子对象集合
		NodeList list = root.getChildNodes();

 那么list.getLength()值是什么呢?

 

不熟悉的人可能会认为是:1 ,其实实际答案是3 如下所示:

 

1 空白text-Node
		2 element-Node
		(
			<man>
				<name>sky</name>
				<age>18</age>
				<sex>1</sex>
			</man>
		)
		3 空白text-Node

 如果

 

NodeList list2 = doc.getElementsByTagName("man")
 

那么list2.getLength()值是什么呢?

答案是:1 这个不含有空白node

 

举例二:

 

<name>sky</name>

 这个节点对象的getChildNodes().getLength()是几呢?答案是1 不包含空白节点

需要注意下。

 

 

分享到:
评论

相关推荐

    JSP基于dom解析xml实例详解.docx

    JSP基于dom解析xml实例详解.docx

    dom4j解析xml详解

    很详细的文档 可以借鉴下 希望对你有帮助

    JAVA DOM解析XML文件过程详解

    主要介绍了JAVA DOM解析XML文件过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    dom4j解析xml详解,包含源代码,dom4j.jar包

    内附dom4j-1.6.1.rar(内有dom4j-1.6.1.jar包和附加包),解析xml详解文档,解析xml的java源码。

    java_Dom4j解析XML详解.doc

    java_Dom4j解析XML详解.doc

    java_Dom4j解析XML详解.docx

    java_Dom4j解析XML详解.docx

    java_Dom4j解析XML详解.pdf

    java_Dom4j解析XML详解.pdf

    java_Dom4j解析XML详解

    NULL 博文链接:https://jaybin.iteye.com/blog/1696303

    JSP基于dom解析xml实例详解

    本文实例讲述了JSP基于dom解析xml的方法。分享给大家供大家参考,具体如下: 初次学习用dom操作xml文件,有很多不足之处,牛人多给点建议,练习时我没对中文做乱码处理,也没做验证哦!O(∩_∩)O~ 实体类:User ...

    xml解析与封装详解

    XML 解析与封装详解 XML(eXtensible Markup Language),即可扩展的标记性语言,是一种用于存储和传输数据的语言。XML 文件的所有标记都是可扩充的,不像 HTML 那样是固定的,而是由用户自行规定出来的。XML 的...

    java解析XML详解

    该文简要描述了DOM的概念和内部逻辑结构,给出了DOM文档操作和XML文件互相转换的java实现过程。

    XML解析原理Demo详解

    在Demo中,解析XML到前台显示用的是JDOM,而在模拟Bean工厂解析spring-config的时候,用的是DOM4J的解析方式,两者各有优点,如果你细心的话,可在源代码中发现两者的区别,祝你也早日了解XML的解析原理。

    Android利用Dom对XML进行增删改查操作详解

    1. 概述 平常我们一般是使用JSON与服务器做数据通信,JSON的话,直接用GSON或者其他库...DOM解析器在解析XML文档时,会把文档中的所有元素,按照其出现的层次关系,解析成一个个Node对象(节点)。再形象点,就是一棵树,

    Android编程解析XML方法详解(SAX,DOM与PULL)

    本文实例讲述了Android编程解析XML方法。分享给大家供大家参考,具体如下: XML在各种开发中都广泛应用,Android也不例外。作为承载数据的一个重要角色,如何读写XML成为Android开发中一项重要的技能。今天就由我向...

    简化XML处理详解

    从时延方面比较了VTD-XML和DOM(不支持延迟节点扩展特性)的浏览性能。VTD-XML的性能与其他解析器相比优势明显,可以说无可比拟。而且同样是VTD-XML,使用缓冲器重用和未使用缓冲器重用有重大区别。大大提高了内存...

    详解Java解析XML的四种方法.doc

    本文档主要讲述的是详解Java解析XML的四种方法;XML现在已经成为一种通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成与交互带来了极大的方便。 本文使用JAVA语言来实现DOM与SAX的XML文档生成与...

    详解Java解析XML的四种方法

    xml 解析方式有四种--DOM 、SAX、JDOM、DOM4J。

Global site tag (gtag.js) - Google Analytics