- 浏览: 29582 次
- 性别:
- 来自: 深圳
最新评论
-
红袖添香夜半读:
分析的很好,谢谢。
DOM解析XML——初步(1) -
红袖添香夜半读:
很好,对我帮助很大,谢谢分享。
DOM解析XML——完整(2)
在使用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解析都是作为子节点来看待的。无内容则表示无子节点。
发表评论
-
DOM解析XML——完整(2)
2011-04-29 00:21 1602在网上search了很多DOM解析XML的代码,总觉得不好,主 ... -
登陆验证Demo
2009-11-17 21:52 836登录验证,当用户名为abc,密码为123时返回通过,否则为登 ... -
分享Java面试中遇到的一些经典算法题目
2009-11-18 21:25 6171.写一个方法,用一个fo ... -
try...catch...finally,throw,throws的综合运用
2010-04-18 10:41 671现在要设计一个相处的方法,要求必须打印“计算开始”和“计算结束 ... -
【java算法】买苹果
2010-04-19 15:07 712题目:有600个苹果,要求分装在10个盒子中。对于顾客要求的任 ... -
实现线程的两种方式
2010-04-20 15:39 6941、通过继承Thread实现线程: //关于使用Thread ... -
Runnable方式实现线程可以共享资源的原因
2010-04-20 15:45 2073线程的两种实现方式, ... -
线程interrupt方法中断的实质
2010-04-20 18:09 624首先有两段代码: 代 ... -
线程同步的缘由和方法
2010-04-21 10:14 881我们知道,使用Runnable方式实现线程可以实现资源共享,但 ... -
死锁和synchronized的进一步研究
2010-04-23 13:23 728当synchronized使用过多时 ... -
如何使用继承Thread的方法实现实现资源共享
2010-04-23 23:03 1165大家都知道,通过继承Runnable接口实现的多线程可以实现资 ... -
生产者和消费者
2010-04-28 13:21 906生产者和消费者:当生产者在生产时,消费者等待。生产者生产完毕, ... -
排序——1.直接插入排序
2010-04-28 22:40 825插入排序的思想:将要排序的数组分成两块,将后一块的数挨个提取出 ... -
排序——2.冒泡排序
2010-04-29 09:14 740冒泡排序:对数组进行遍历,每次遍历都是为了找出最大值,并将最 ... -
关于equals和“==”的详解
2010-05-01 22:17 745首先,equals,equals最常用的是在String下调用 ... -
多态中向上转型后对属性的调用
2010-05-05 21:23 1342声明父类的引用指向子类的实例就是向上转型,向上转型发生后可以调 ... -
基本数据类型自动向String转型
2010-05-05 21:40 956对于java中的基本数据类型,都可以通过打包转换成其各自对应的 ... -
排序——3.希尔排序
2010-05-05 22:35 864希尔排序是在直接插入排序上改进而来。 1.以一个增量te ... -
使用Inputstream读取文件
2010-05-20 11:35 2099在java中,可以使用InputStream对文件进行读取,就 ... -
Inputstream读取文件,使用read()方法,判断尾标记需要注意的问题
2010-05-20 11:46 2246先看下面一段代码: //同过判断文件的结尾来读取文件 im ...
相关推荐
### Java解析XML——DOM详解 #### 一、DOM解析概念 **Document Object Model (DOM)**是一种平台和语言中立的接口,它允许程序和脚本动态地访问和更新文档的内容、结构和样式。DOM最初是为HTML设计的,但后来也被...
例如,对于DOM解析,可以创建`DOMParser`实例,然后使用`parse()`方法解析XML文档;对于SAX解析,可以实现`ContentHandler`接口,并注册到`SAXParser`中。同时,可以通过`XMLSchemaValidator`进行XML Schema验证。 ...
以下是DOM解析XML的基本流程: 1. 加载`DocumentBuilderFactory`,并设置解析器特性。 2. 使用`DocumentBuilderFactory`创建`DocumentBuilder`实例。 3. 调用`DocumentBuilder`的`parse()`方法解析XML文件,得到`...
使用DOM解析XML文件时,首先需要加载XML文档到内存,然后通过DOM API创建Document对象。接着,可以通过Document对象的`getElementsByTagName`等方法找到特定的元素,进而操作它们的属性或子元素。例如,我们可以查找...
1. javax.xml.parsers:这个包包含了用于解析XML的DocumentBuilder和DocumentBuilderFactory类。 2. javax.xml.transform:包含了用于转换XML文档的Transformer和TransformerFactory类。 ***.w3c.dom:包含了DOM操作...
DOM解析器将整个XML文档加载到内存中,形成一个树形结构,便于随机访问;SAX解析器采用事件驱动的方式,逐行处理XML,占用内存少,适用于大文件;StAX则提供了一个流式接口,允许程序按需读取或写入XML。 此外,...
本篇文章将深入探讨如何使用DOM4J来解析XML文件,以及通过示例代码来展示其基本操作。 首先,我们需要理解DOM4J的工作原理。DOM4J采用的是DOM(Document Object Model)模型,它将整个XML文档加载到内存中形成一棵...
在Java环境中,解析XML文档时,我们通常会遇到各种库,其中DOM4J是一个非常流行的、功能强大的开放源代码库。这个库不仅简化了XML处理,还提供了XPath和XSLT的支持,使其成为Java开发者处理XML的首选工具之一。 **...
除了SAX解析,你提到的还有DOM解析。DOM(Document Object Model)是另一种常用的XML解析方式,它将整个XML文档加载到内存中形成一个树形结构,便于遍历和操作。`DocumentBuilder`工厂是JAXP的一部分,可以用来创建`...
在本主题"Android之PULL解析XML文件——新浪微博客户端首页效果"中,我们将深入探讨如何利用PULL解析器(PullParser)来处理XML数据,从而实现类似新浪微博客户端首页的动态效果。这种效果通常包括新闻标题、摘要、...
- **适合解析简单结构的XML**:对于结构复杂、嵌套深度大的XML,Pull解析可能不如DOM或SAX解析直观。 在实际开发中,如Android的布局文件解析、配置文件读取或者从网络获取XML数据时,都可以使用Pull解析器进行处理...
解析XML是将XML文档转换为程序可以理解的数据结构的关键步骤。本文将深入探讨XML解析的基本概念、常用方法以及相关的Java库——JDOM。 XML文档由一系列元素构成,每个元素都包含标签、属性和内容。解析XML的过程...
本文将深入探讨XML数据在前后台解析的过程中,重点介绍两种主流的Java XML解析库——JDOM和DOM4J,并提供实际运行的程序示例。同时,我们还会讨论如何使用jQuery在前端解析XML并展示数据。 首先,让我们了解XML的...
在这个chm格式的文件“XMLDOM对象方法手册”中,很显然包含了关于XMLDOM核心对象——XMLDocument的所有方法和属性的详尽指南。 XMLDocument对象是XMLDOM的核心,它是整个XML文档的根节点,代表了一个完整的XML文件...
1. **解析XML文件**: - DOM解析:首先,通过`javax.xml.parsers.DocumentBuilderFactory`和`DocumentBuilder`创建一个`Document`对象,这代表了整个XML文件的根节点。然后,调用`parse()`方法读取XML文件并将其...
**标题解析:** "Dom4J解析XML" 这个标题明确指出了我们要讨论的核心技术——使用Dom4J库来解析XML文档。Dom4J是一个Java库,它提供了丰富的API来处理XML,包括读取、写入、修改以及查询XML文档。在本文中,我们将...
本文将详细介绍如何使用两种流行的方法——`MiniDom`和`ElementTree`来解析XML文件。 #### 1. 通过 MiniDom 库解析 XML 文件 `MiniDom`是Python标准库中的一部分,它提供了DOM(Document Object Model)接口,允许...
1. DOM解析: DOM(Document Object Model)解析器将整个XML文档加载到内存中,形成一个树形结构。这种方式方便对XML进行随机访问,但缺点是占用内存较大,对于大型XML文件不适用。Android中的`org.w3c.dom`包提供了...
DOM解析器将整个XML文档加载到内存中,形成一个树形结构,每个节点代表XML文档的一部分。DOM提供了一个完整的文档视图,方便进行遍历和操作,但对内存需求较高,不适合处理大文件。 总结起来,VTD-XML是介于SAX和...
DOM解析是处理XML文档的一种常见方法,它将整个XML文件加载到内存中,形成一棵由节点构成的树形结构——DOM树。在这个树中,每个XML元素、属性、文本、注释等都有对应的节点。通过遍历和操作这些节点,我们可以轻松...