`
xiaoya629
  • 浏览: 29582 次
  • 性别: 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解析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文件,得到`...

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

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

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

    1. javax.xml.parsers:这个包包含了用于解析XML的DocumentBuilder和DocumentBuilderFactory类。 2. javax.xml.transform:包含了用于转换XML文档的Transformer和TransformerFactory类。 ***.w3c.dom:包含了DOM操作...

    xml——————表单资源

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

    用dom4j解析xml文件

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

    dom4j---xml解析jar包

    在Java环境中,解析XML文档时,我们通常会遇到各种库,其中DOM4J是一个非常流行的、功能强大的开放源代码库。这个库不仅简化了XML处理,还提供了XPath和XSLT的支持,使其成为Java开发者处理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**:对于结构复杂、嵌套深度大的XML,Pull解析可能不如DOM或SAX解析直观。 在实际开发中,如Android的布局文件解析、配置文件读取或者从网络获取XML数据时,都可以使用Pull解析器进行处理...

    解析xml的jar包

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

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

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

    xmldom

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

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

    1. **解析XML文件**: - DOM解析:首先,通过`javax.xml.parsers.DocumentBuilderFactory`和`DocumentBuilder`创建一个`Document`对象,这代表了整个XML文件的根节点。然后,调用`parse()`方法读取XML文件并将其...

    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三种方式——源码分析

    1. DOM解析: DOM(Document Object Model)解析器将整个XML文档加载到内存中,形成一个树形结构。这种方式方便对XML进行随机访问,但缺点是占用内存较大,对于大型XML文件不适用。Android中的`org.w3c.dom`包提供了...

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

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

    XML文档的DOM解析,可以提取文档的特征值

    DOM解析是处理XML文档的一种常见方法,它将整个XML文件加载到内存中,形成一棵由节点构成的树形结构——DOM树。在这个树中,每个XML元素、属性、文本、注释等都有对应的节点。通过遍历和操作这些节点,我们可以轻松...

Global site tag (gtag.js) - Google Analytics