- 浏览: 29568 次
- 性别:
- 来自: 深圳
最新评论
-
红袖添香夜半读:
分析的很好,谢谢。
DOM解析XML——初步(1) -
红袖添香夜半读:
很好,对我帮助很大,谢谢分享。
DOM解析XML——完整(2)
在网上search了很多DOM解析XML的代码,总觉得不好,主要原因是都有这样的代码:
document.getElementsByTagName("tagName");
我希望能有一个对XML标签名没有限定的处理逻辑,只需要传入XML文件的路径,即可对此XML进行解析。一直找不到,就自己手写了一个。
DOM解析有三点是很重要的,可能我的描述并不准确,因为我是在debug过程中分析出来的,并没有去参看DOM的文档。
- DOM将回车(换行符)和节点内容(Value)都是作为节点来解析的。
- 因为第一点,DOM将节点进行了分类,主要是有两类:TEXT_NODE ,ELEMENT_NODE,通过对节点的类型判断,可以很好的解析和过滤所有的节点。
- 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>
发表评论
-
DOM解析XML——初步(1)
2011-04-26 23:48 1864在使用DOM解析XML的时候,遇到一个问题:通过getNode ... -
登陆验证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 879我们知道,使用Runnable方式实现线程可以实现资源共享,但 ... -
死锁和synchronized的进一步研究
2010-04-23 13:23 727当synchronized使用过多时 ... -
如何使用继承Thread的方法实现实现资源共享
2010-04-23 23:03 1165大家都知道,通过继承Runnable接口实现的多线程可以实现资 ... -
生产者和消费者
2010-04-28 13:21 905生产者和消费者:当生产者在生产时,消费者等待。生产者生产完毕, ... -
排序——1.直接插入排序
2010-04-28 22:40 825插入排序的思想:将要排序的数组分成两块,将后一块的数挨个提取出 ... -
排序——2.冒泡排序
2010-04-29 09:14 739冒泡排序:对数组进行遍历,每次遍历都是为了找出最大值,并将最 ... -
关于equals和“==”的详解
2010-05-01 22:17 745首先,equals,equals最常用的是在String下调用 ... -
多态中向上转型后对属性的调用
2010-05-05 21:23 1340声明父类的引用指向子类的实例就是向上转型,向上转型发生后可以调 ... -
基本数据类型自动向String转型
2010-05-05 21:40 956对于java中的基本数据类型,都可以通过打包转换成其各自对应的 ... -
排序——3.希尔排序
2010-05-05 22:35 862希尔排序是在直接插入排序上改进而来。 1.以一个增量te ... -
使用Inputstream读取文件
2010-05-20 11:35 2098在java中,可以使用InputStream对文件进行读取,就 ... -
Inputstream读取文件,使用read()方法,判断尾标记需要注意的问题
2010-05-20 11:46 2245先看下面一段代码: //同过判断文件的结尾来读取文件 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处理相关的包。这些包包括: 1. javax.xml.parsers:这个包包含了用于解析XML的DocumentBuilder和DocumentBuilderFactory类。 2. javax.xml.transform:包含了用于转换XML...
使用DOM解析XML文件时,首先需要加载XML文档到内存,然后通过DOM API创建Document对象。接着,可以通过Document对象的`getElementsByTagName`等方法找到特定的元素,进而操作它们的属性或子元素。例如,我们可以查找...
DOM解析器将整个XML文档加载到内存中,形成一个树形结构,便于随机访问;SAX解析器采用事件驱动的方式,逐行处理XML,占用内存少,适用于大文件;StAX则提供了一个流式接口,允许程序按需读取或写入XML。 此外,...
在Java环境中,解析XML文档时,我们通常会遇到各种库,其中DOM4J是一个非常流行的、功能强大的开放源代码库。这个库不仅简化了XML处理,还提供了XPath和XSLT的支持,使其成为Java开发者处理XML的首选工具之一。 **...
本篇文章将深入探讨如何使用DOM4J来解析XML文件,以及通过示例代码来展示其基本操作。 首先,我们需要理解DOM4J的工作原理。DOM4J采用的是DOM(Document Object Model)模型,它将整个XML文档加载到内存中形成一棵...
除了SAX解析,你提到的还有DOM解析。DOM(Document Object Model)是另一种常用的XML解析方式,它将整个XML文档加载到内存中形成一个树形结构,便于遍历和操作。`DocumentBuilder`工厂是JAXP的一部分,可以用来创建`...
在本主题"Android之PULL解析XML文件——新浪微博客户端首页效果"中,我们将深入探讨如何利用PULL解析器(PullParser)来处理XML数据,从而实现类似新浪微博客户端首页的动态效果。这种效果通常包括新闻标题、摘要、...
XML Pull解析器(XML Pull Parser)是一种事件驱动的解析模型,它不需要完整的XML文档加载到内存中,而是通过读取XML文档的下一个事件(如开始元素、结束元素、文本等)来进行解析。这种解析方式非常适合资源有限的...
解析XML是将XML文档转换为程序可以理解的数据结构的关键步骤。本文将深入探讨XML解析的基本概念、常用方法以及相关的Java库——JDOM。 XML文档由一系列元素构成,每个元素都包含标签、属性和内容。解析XML的过程...
在这个chm格式的文件“XMLDOM对象方法手册”中,很显然包含了关于XMLDOM核心对象——XMLDocument的所有方法和属性的详尽指南。 XMLDocument对象是XMLDOM的核心,它是整个XML文档的根节点,代表了一个完整的XML文件...
本文将深入探讨XML数据在前后台解析的过程中,重点介绍两种主流的Java XML解析库——JDOM和DOM4J,并提供实际运行的程序示例。同时,我们还会讨论如何使用jQuery在前端解析XML并展示数据。 首先,让我们了解XML的...
在Java编程环境中,解析XML文件是一项常见的任务,特别是在数据处理和集成中。XML(Extensible Markup Language)是一种结构化数据格式,广泛用于存储和传输数据。本教程将介绍如何使用Java解析XML文件,并将解析...
DOM解析器将整个XML文档加载到内存中,形成一个树形结构,每个节点代表XML文档的一部分。DOM提供了一个完整的文档视图,方便进行遍历和操作,但对内存需求较高,不适合处理大文件。 总结起来,VTD-XML是介于SAX和...
**标题解析:** "Dom4J解析XML" 这个标题明确指出了我们要讨论的核心技术——使用Dom4J库来解析XML文档。Dom4J是一个Java库,它提供了丰富的API来处理XML,包括读取、写入、修改以及查询XML文档。在本文中,我们将...
本文将详细介绍如何使用两种流行的方法——`MiniDom`和`ElementTree`来解析XML文件。 #### 1. 通过 MiniDom 库解析 XML 文件 `MiniDom`是Python标准库中的一部分,它提供了DOM(Document Object Model)接口,允许...
Android中的`org.w3c.dom`包提供了DOM解析的相关API,如`DocumentBuilderFactory`用于创建`DocumentBuilder`,`DocumentBuilder`则可以解析XML文件并生成`Document`对象。 2. SAX解析: SAX(Simple API for XML)...
- **优点**:DOM解析提供了对XML的完整结构,可以方便地进行任意位置的修改,适合处理小规模的XML文件。 - **缺点**:由于整个XML文件被加载到内存,对于大文件,可能会消耗大量内存,且解析速度较慢。 5. **优化...