DOM方式解析XML文件实例
books.XML文件:
<?xml version="1.0" encoding="utf-8"?>
<bookstore>
<book id="1">
<name>冰与火之歌</name>
<author>乔治马丁</author>
<price>88.0</price>
<year>2014</year>
</book>
<book id="2">
<name>安徒生童话</name>
<price>77.0</price>
<language>English</language>
</book>
</bookstore>
把这个文档放在项目的根路径下,与src目录平行,就可以使用相对路径来引用了。
Java代码部分:
public class DOMTest {
public static void main(String[] args) {
// step 1:获得DOM解析器工厂
// 工厂的作用是创建具体的解析器,即创建一个DocumentBuilderFactory对象
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
try {
// step 2:获得具体的dom解析器 创建一个DocumentBuilder对象
DocumentBuilder db=dbf.newDocumentBuilder();
// step 3:解析一个xml文档,通过Document对象的parse方法加载books.xml文件到当前目录下
Document document=db.parse("books.xml");
//获取所有book节点的集合
NodeList booklist= document.getElementsByTagName("book");
//遍历每一个book节点
// 通过getLength()获取NodeList的长度
for(int i=0;i<booklist.getLength();i++){
System.out.println("下面开始遍历第"+(i+1)+"本书");
// 节点有多个属性时:
//通过item(i)获取bookList的节点值,NodeList索引值从0开始
Node book=booklist.item(i);
//获取book的所有属性
NamedNodeMap attrs= book.getAttributes();
for(int j=0;j<attrs.getLength();j++){
//通过item(index)方法获取book节点的某一个属性
Node attr=attrs.item(j);
//获取属性名
System.out.println("属性名:"+attr.getNodeName());
//获取属性值
System.out.println("属性值:"+attr.getNodeValue());
}
//当知道节点只有一个id属性时:
/*Element attr= (Element) booklist.item(i);
String attributeValue=attr.getAttribute("id");
System.out.println("id属性的属性值为:"+attributeValue);*/
//下面解析book节点的子节点
NodeList childNodes = book.getChildNodes();
System.out.println("第"+(i+1)+"本书共有"+childNodes.getLength()+"个子节点");
//获取每个节点的节点名和节点值
for(int k=0;k<childNodes.getLength();k++){
//区分出text类型的node及element类型的node
if(childNodes.item(k).getNodeType()==Node.ELEMENT_NODE){
//获取了element类型的节点的节点名
System.out.print("第"+(k+1)+"个子节点的节点名称是:"+childNodes.item(k).getNodeName());
//两者之间的区别是Element类型的节点值为空
System.out.println("------"+childNodes.item(k).getFirstChild().getNodeValue());
// System.out.println("------"+childNodes.item(k).getTextContent());
}
}
}
System.out.println("===============循环结束==============");
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
具体过程参见注释。
首先,我们需要建立一个解析器工厂,以利用这个工厂来获得一个具体的解析器对象。

我们在这里使用DocumentBuilderFactory的目的是为了创建与具体解析器无关的程序,当DocumentBuilderFactory类的静态方法newInstance()被调用时,它根据一个系统变量来决定具体使用哪一个解析器。
又因为所有的解析器都服从于JAXP所定义的接口,所以无论具体使用哪一个解析器,代码都是一样的。
所以当在不同的解析器之间进行切换时,值需要更改系统变量的值,而不用更改任何代码。这就是工厂所带来的好处。

当获得一个工厂对象之后,使用它的静态方法newDocumentBuilder(),可以获得一个DocumentBuilder对象。
这个对象代表了具体的DOM解析器。
解析器的具体实现对于程序来说并不重要。
然后,我们就可以利用这个解析器对文档进行解析了。
Sun公司提供了默认的工厂和默认的解析器,上面的例子中就使用了默认的解析器。
DOM方式解析XML文件实例的更多相关文章
- 用JAXP的dom方式解析XML文件
用JAXP的dom方式解析XML文件,实现增删改查操作 dom方式解析XML原理 XML文件 <?xml version="1.0" encoding="UTF-8 ...
- 在iOS 开发中用GDataXML(DOM方式)解析xml文件
因为GDataXML的内部实现是通过DOM方式解析的,而在iOS 开发中用DOM方式解析xml文件,这个时候我们需要开启DOM,因为ios 开发中是不会自动开启的,只有在mac 开发中才自动开启的.我 ...
- Java-Web DOM方式解析xml文件
XML DOM 树形结构: DOM 节点 根据 DOM,XML 文档中的每个成分都是一个节点. DOM 是这样规定的: 整个文档是一个文档节点 每个 XML 元素是一个元素节点 包含在 XML 元素中 ...
- Java&Xml教程(二)使用DOM方式解析XML文件
DOM XML 解析方式是最容易理解的,它將XML文件作为Document对象读取到内存中,然后你可以轻松地遍历不同的元素和节点对象.遍历元素和节点不需要按照顺序进行. DOM解析方式适合尺寸较小的X ...
- SAX方式解析XML文件实例
books.XML文件: 书籍book.java实体类: public class Book { private String id; private String name; private Str ...
- dom方式解析xml文件的步骤
使用java类即可
- 用DOM方式解析XML
一.用DOM方式解析XML 此例子节点结构如下: 1.获取book节点属性 (1).如果不知道节点的属性,通过 NamedNodeMap attrs = book.getAttributes(); 来 ...
- Dom方式解析XML
public class TestXML { public static void main(String[] args) throws SAXException, IOException { //D ...
- Java眼中的XML--文件读取--1 应用DOM方式解析XML
初次邂逅XML: 需要解析的XML文件: 这里有两个book子节点. 1.如何进行XML文件解析前的准备工作,另外解析先获取book节点. 这个我后来看懂了: 这个Node的ELEMENT_NODE= ...
随机推荐
- C++学习笔记(十):类
类的定义: C++中使用关键字 class 来定义类, 其基本形式如下: class 类名 { public: //公共的行为或属性 protected: //受保护的行为或属性 private: / ...
- 海量Office文档搜索
知识管理系统Data Solution研发日记之十 海量Office文档搜索 经过前面两篇文章的介绍,<分享制作精良的知识管理系统 博客备份程序 Site Rebuild>和<分 ...
- virtualbox 创建com对象失败
其实这个错误是因为VirtualBox不兼容Win7引起的,只要把VirtualBox的兼容模式改为出Win7以外的就行了.. 右键VirtualBox的桌面快捷方式,选择属性,选到兼容性选项卡,勾选 ...
- 【转】linux中的sort命令
转自:http://www.cnblogs.com/51linux/archive/2012/05/23/2515299.html sort是在Linux里非常常用的一个命令,管排序的,集中精力,五分 ...
- Java连接MYSQL【转载】
这篇文章主要以MySQL为例讲下Java如何连接到数据库的. 当然,首先要安装有JDK(一般是JDK1.5.X).然后安装MySQL,这些都比较简单,具体过程就不说了.配置好这两个环境后,下载JDBC ...
- 较具体的介绍JNI
JNI事实上是Java Native Interface的简称,也就是java本地接口.它提供了若干的API实现了和Java和其它语言的通信(主要是C&C++).或许不少人认为Java已经足够 ...
- myeclipse和eclipse安装Java反编译插件
为myeclipse和eclipse安装Java反编译插件 插件所需包 1.解压jad1.5.8g.zip.将jad.exe放到jre的bin目录下,下载地址: http://ishare.ia ...
- document.location的属性
示例html完整路径为: http://10.10.3.117:8500/html/ypt/index.html alert("document.location.href:"+d ...
- Print2flash在.NET(C#)64位中的使用,即文档在线预览
转:http://www.cnblogs.com/flowwind/p/3411106.html Print2flash在.NET(C#)中的使用,即文档在线预览 office文档(word,ex ...
- JavaScript学习总结-技巧、有用函数、简洁方法、编程细节
整理JavaScript方面的一些技巧.比較有用的函数,常见功能实现方法,仅作參考 变量转换 //edit http://www.lai18.com var myVar = "3.14159 ...