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

DOM解析XML——初步(1)

    博客分类:
  • java
阅读更多

在使用DOM解析XML的时候,遇到一个问题:通过getNodeValue()获取节点value,但得到的却是"#text"和许多空格的问题,尝试之后,得到分析如下:

 

在DOM解析XML,如果用到了

NodeList nodeList =  document.getElementsByTagName("tagName");

 

这样的方式来获取节点,并且用

nodeList.item(i).getFirstChild().getNodeValue()

 

这样的方式读取某个节点的值,需要注意一点的是,这里你传入的tagName必须是你要获取的值的当前节点,例如<info><name>java</name></info>,如果你要得到"java",这里传入的tagName就必须是name,而不能是info。传入info得到的value是"#text"。按照代码的理解,首先获取name节点,得到name节点的子节点并获得此节点的value——"java"。这里java虽然不是标签,但是仍然是以节点的方式来看待和读取的。

完整的代码如下:

import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import java.io.File;
public class XMLDemo1
{
	public static void main(String args[]) throws Exception{
		DocumentBuilderFactory  builderFactory = DocumentBuilderFactory.newInstance();
		DocumentBuilder builder = builderFactory.newDocumentBuilder();
		Document document = builder.parse(new File("E:"+File.separator+"java3"+File.separator+"XMLTest"+File.separator+"listData.xml"));
		NodeList nodeList =  document.getElementsByTagName("image");
		System.out.println(nodeList.getLength());
		for(int i = 0; i < nodeList.getLength(); i++){			
		System.out.println("image:" + nodeList.item(0).getFirstChild().getNodeValue()) ;
		}
	}
}

  listData.xml:

<?xml version="1.0"?>
<items>
	<item>
		<image>assets/icons/ce.jpg</image>
	</item>
	<item>
		<image>assets/icons/ai.jpg</image>
	</item>
	<item>
		<image>assets/icons/ps.jpg</image>
	</item>
	<item>
		<image>assets/icons/fw.jpg</image>
	</item>
	<item>
		<image>assets/icons/fl.jpg</image>
	</item>
	<item>
		<image>assets/icons/air.jpg</image>
	</item>
</items>

 输出结果可以看到得到了image标签的内容,但如果传入的是item,那么得到的就是"#text"和许多的空格。

 

在此,做另外一个尝试,Node类有一个方法"hasChildNodes()",用于判断这个Node是否有子节点。用这个方法判断<image>assets/icons/ce.jpg</image>和<image></image>是否有区别:

import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import java.io.File;
public class XMLDemo1
{
	public static void main(String args[]) throws Exception{
		DocumentBuilderFactory  builderFactory = DocumentBuilderFactory.newInstance();
		DocumentBuilder builder = builderFactory.newDocumentBuilder();
		Document document = builder.parse(new File("E:"+File.separator+"java3"+File.separator+"XMLTest"+File.separator+"listData.xml"));
		NodeList nodeList =  document.getElementsByTagName("image");
		System.out.println(nodeList.getLength());
		for(int i = 0; i < nodeList.getLength(); i++){
			System.out.println(nodeList.item(i).hasChildNodes());
		}
	}
}

  listData.xml:

<?xml version="1.0"?>
<items>
	<item>
		<image></image>
	</item>
	<item>
		<image>assets/icons/ai.jpg</image>
	</item>
	<item>
		<image></image>
	</item>
	<item>
		<image>assets/icons/fw.jpg</image>
	</item>
	<item>
		<image></image>
	</item>
	<item>
		<image>assets/icons/air.jpg</image>
	</item>
</items>

 

 运行之后可以发现结果如下:


             false
             true
             false
             true
             false
             true

 

由此可以知道,当标签中有内容时——无论是子标签还是value字符串,dom解析都是作为子节点来看待的。无内容则表示无子节点。

 

 

 

 

 

 

分享到:
评论
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测试方法的使用

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

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

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

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

    java工具类——dom4j

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

    XML文档解析相关工具

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

    Tinyxml 源代码(VC6 & VS2005)

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

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

    C# XML入门经典——C#编程人员必备的XML技能 作者:[美]Stewart Fraser, Steven 著,毛尧飞,崔伟 译 出版社:清华大学出版社 出版时间:2003年11月 第1章 在C#中使用XML的原因 &lt;br&gt;1.1 使用XML的原因...

    锋利的jquery——1

    第5篇介绍了jQuery加载并解析xml. 第6篇是第七章的插件的API 第7篇是jQuery API速查表. 本书循序渐进的对jQuery的各种方法和使用进行介绍,读者可以系统的掌握jQuery关于DOM操作、事件监听和动画、表单操作、AJAX...

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

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

    北京中科信软AJAX培训

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

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

     3.2.2 DOM 1 级   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中的重要性...

Global site tag (gtag.js) - Google Analytics