- 浏览: 28326 次
- 性别:
- 来自: 深圳
最新评论
-
红袖添香夜半读:
分析的很好,谢谢。
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 1813在使用DOM解析XML的时候,遇到一个问题:通过getNode ... -
登陆验证Demo
2009-11-17 21:52 814登录验证,当用户名为abc,密码为123时返回通过,否则为登 ... -
分享Java面试中遇到的一些经典算法题目
2009-11-18 21:25 5821.写一个方法,用一个fo ... -
try...catch...finally,throw,throws的综合运用
2010-04-18 10:41 641现在要设计一个相处的方法,要求必须打印“计算开始”和“计算结束 ... -
【java算法】买苹果
2010-04-19 15:07 676题目:有600个苹果,要求分装在10个盒子中。对于顾客要求的任 ... -
实现线程的两种方式
2010-04-20 15:39 6541、通过继承Thread实现线程: //关于使用Thread ... -
Runnable方式实现线程可以共享资源的原因
2010-04-20 15:45 2037线程的两种实现方式, ... -
线程interrupt方法中断的实质
2010-04-20 18:09 596首先有两段代码: 代 ... -
线程同步的缘由和方法
2010-04-21 10:14 833我们知道,使用Runnable方式实现线程可以实现资源共享,但 ... -
死锁和synchronized的进一步研究
2010-04-23 13:23 686当synchronized使用过多时 ... -
如何使用继承Thread的方法实现实现资源共享
2010-04-23 23:03 1120大家都知道,通过继承Runnable接口实现的多线程可以实现资 ... -
生产者和消费者
2010-04-28 13:21 849生产者和消费者:当生产者在生产时,消费者等待。生产者生产完毕, ... -
排序——1.直接插入排序
2010-04-28 22:40 784插入排序的思想:将要排序的数组分成两块,将后一块的数挨个提取出 ... -
排序——2.冒泡排序
2010-04-29 09:14 700冒泡排序:对数组进行遍历,每次遍历都是为了找出最大值,并将最 ... -
关于equals和“==”的详解
2010-05-01 22:17 708首先,equals,equals最常用的是在String下调用 ... -
多态中向上转型后对属性的调用
2010-05-05 21:23 1303声明父类的引用指向子类的实例就是向上转型,向上转型发生后可以调 ... -
基本数据类型自动向String转型
2010-05-05 21:40 917对于java中的基本数据类型,都可以通过打包转换成其各自对应的 ... -
排序——3.希尔排序
2010-05-05 22:35 813希尔排序是在直接插入排序上改进而来。 1.以一个增量te ... -
使用Inputstream读取文件
2010-05-20 11:35 2030在java中,可以使用InputStream对文件进行读取,就 ... -
Inputstream读取文件,使用read()方法,判断尾标记需要注意的问题
2010-05-20 11:46 2201先看下面一段代码: //同过判断文件的结尾来读取文件 im ...
相关推荐
java程序中使用dom解析xml文件介绍
java学习笔记——使用DOM解析XML和使用SAX解析XML
学习xml——sax解析的项目小示例 非常简单易懂 而且包括多种sax解析的方法 如xmlReader,saxBuilder工厂,还包括一个dom解析的示例(DocumentBuilder工厂)
adroid解析XML三种方式——源码分析,DOM,SAX,Pull,
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(二)——详解Dom4j方式,这里整理了详细的代码,有需要的小伙伴可以参考下。
xml入门小项目——通讯录系统 系统特点: 1、系统主程序入口MainProgram.java ...系统xml文档通过dom4j技术创建和解析。 3、涉及JavaSE中的集合、泛型、接口文件及其实现类的应用等。 4、涉及junit测试方法的使用
本文实例讲述了PHP基于DOM创建xml文档的方法。分享给大家供大家参考,具体如下: ...1、创建DOM对象 ——》2、创建节点——》3、创建下级节点——》4、将下级节点加入到上级节点中——》5、创建属性节
DOM解析 逐行扫描XML文件,读取文件的同时即可进行解析处理,不必等到文件加载结束。缺点是无法进行增、删、改等操作。 SAX解析 一个开源的Java项目,既可以用于Android应用,也可以用于JavaEE程序。Android中已经...
dom4j是sourceforge.net上的一个开源项目,主要用于对XML的解析。
工具内容包括java程序开发中文件配置解析需要实用的jar包工具——[dom4j-1.6.1.jar]&[jaxen-1.1-beta-6.jar]
XML概述 <br>2.1 XML的概念 2.1.1 XML元素 2.1.2 XML属性 2.1.3 XML解析器 2.1.4 构建XML 2.1.5 XML文档的各个组成部分 2.2 创建格式良好的XML文档 2.2.1 XML中的元素 2.2.2 XML中的属性...
简单地说,TinyXML解析一个XML文档并由此生成一个可读可修改可保存的文档对象模型(DOM)。 XML的意思是“可扩展标记语言“(eXtensible Markup Language)。它允许你创建你自己的文档标记。在为浏览器标记文档...
范 例 xmlDocument ————————————————————————————- AppendChild 方法 作 用 加上一个节点当作指定节点最后的子节点。 基本语法 xmlDocumentNode.appendChild(newChild); 说 明 new...
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中的重要性 3.4.2 核心Node...
Xerces Java Parser 1.2.0支持XML 1.0,可用于建立兼容XML的网页服务器,建立下一代基于XML的垂直应用,制作XML编辑器,保证XML数据的完整性以及建立全球XML应用。 Xerces-C是用可移植的C++子集编写的XML分析器。...
操纵和解析XML 选择合适的XML生成方式 XHTML与CSS XHTML、CSS与Ajax XHTML与CSS基础 XHTML语法约束 JavaScript JavaScript与Ajax JavaScript基本数据结构 JavaScript表达式和运算符 JavaScript的流程控制和函数 ...