JAVA解析XML之DOM方式
JAVA解析XML之DOM方式
准备工作
创建DocumentBuilderFactory对象;
创建DocumentBuilder对象;
通过DocumentBuilder对象的parse方法加载xml
解析XML文件的属性名和属性值
解析XML文件的节点名和节点值
常用方法如下:
getElementsByTagName();
getLength();
item();
getNodeName();
getNodeValue();
getNodeType();
*getAttributes(); node
*getAttribute("name"); element
getChildNodes();
getFirstChild();
常用的节点类型:

下面直接上代码
package pers.zww.xml; import java.io.IOException; import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
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; public class Dom {
public static void main(String[] args) {
// 创建DocumentBuilderFactory对象
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
// 创建DocumentBuilder对象
DocumentBuilder db;
try {
db = dbf.newDocumentBuilder();
// 通过DocumentBuilder对象的parse方法加载xml
Document document = db.parse("books.xml");
// 获取book节点集合
NodeList bookList = document.getElementsByTagName("book");
// 通过noodlist的getLength()方法,获取长度
System.out.println(bookList.getLength());
// 遍历book节点
for (int i = 0; i < bookList.getLength(); i++) { System.out.println("=======================");
// item(i)方法获取节点
Node book = (Node) bookList.item(i);
// 获取book节点的所有属性集合
NamedNodeMap attrs = book.getAttributes();
// 遍历book的属性
System.out.println("第" + (i + 1) + "本书共有" + attrs.getLength()
+ "个属性");
for (int j = 0; j < attrs.getLength(); j++) {
/*
* 节点类型 TYPE
* element 1
* attr 2
* text 3
*/ /*
* 若只有一个属性则
* 将book节点node强制类型转换
* 用element的getAttribute("id")方法
*/ // item(i)方法获取属性
Node attr = attrs.item(j);
// 获取属性名
System.out.print("属性名:" + attr.getNodeName());
// 获取属性值
System.out.println(" && 属性值:" + attr.getNodeValue());
//解析book的子节点
NodeList childNodes=book.getChildNodes();
//获取每个节点的节点名/值
System.out.println("共有"+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("节点名 "+childNodes.item(k).getNodeName());
//获取element类型节点的节点值 //法一:
System.out.println(" && 节点值 "+childNodes.item(k).getFirstChild().getNodeValue()); //法二:
//子节点的所有值
//System.out.println(" && 节点值 "+childNodes.item(k).getTextContent()); /*
* 不同点:
* 若在name节点下再添加一个节点例如<h>xiumu</h>时,法一的值为null,
* 而法二的值为xiumuJAVA编程思想
*/
}
}
}
} } catch (ParserConfigurationException | SAXException | IOException e) {
e.printStackTrace();
} }
}
<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book id="1">
<name><h>xiumu</h>JAVA编程思想</name>
<anthor>****</anthor>
<year>2000</year>
</book>
<book id="2">
<name>疯狂JAVA系列</name>
<anthor>李刚</anthor>
<price>89</price>
</book>
</bookstore>
要点
当已确定节点的属性只有一个时,可将节点强制转换为element,并调用其getAttribute("name")方法;
getLength()方法子节点的个数时,将空白和换行也算了进去;
参考资料
慕课网JessicaJiang老师视频教程点击链接
JAVA解析XML之DOM方式的更多相关文章
- JAVA解析XML之SAX方式
JAVA解析XML之SAX方式 SAX解析xml步骤 通过SAXParseFactory的静态newInstance()方法获取SAXParserFactory实例factory 通过SAXParse ...
- JAVA解析XML文件(DOM,SAX,JDOM,DOM4j附代码实现)
1.解析XML主要有四种方式 1.DOM方式解析XML(与平台无关,JAVA提供,一次性加载XML文件内容,形成树结构,不适用于大文件) 2.SAX方式解析XML(基于事件驱动,逐条解析,适用于只处理 ...
- Java解析XML文件的方式
在项目里,我们往往会把一些配置信息放到xml文件里,或者各部门间会通过xml文件来交换业务数据,所以有时候我们会遇到“解析xml文件”的需求.一般来讲,有基于DOM树和SAX的两种解析xml文件的方式 ...
- java解析XML几种方式
第一种:DOM. DOM的全称是Document Object Model,也即文档对象模型.在应用程序中,基于DOM的XML分析器将一个XML文档转换成一个对象模型的集合(通常称DOM树),应用程序 ...
- java 解析 xml (DOM方法全)
Java 处理 XML 的三种主流技术及介绍 http://www.ibm.com/developerworks/cn/xml/dm-1208gub/ 这篇文章讲的比较详细,下面我主要介绍 dom方法 ...
- java解析XML之DOM解析和SAX解析(包含CDATA的问题)
Dom解析功能强大,可增删改查,操作时会将XML文档读到内存,因此适用于小文档: SAX解析是从头到尾逐行逐个元素解析,修改较为不便,但适用于只读的大文档:SAX采用事件驱动的方式解析XML.如同在电 ...
- python 解析xml 文件: DOM 方式
环境 python:3.4.4 准备xml文件 首先新建一个xml文件,countries.xml.内容是在python官网上看到的. <?xml version="1.0" ...
- 用java操作XML文件(DOM解析方式)
XML 可扩展标记语言(Extensible Markup Language),是独立于软件和硬件的传输工具. XML的作用: (1)用作配置文件 (2)简化数据共享 (3)简化数据传输 XML DO ...
- JAVA解析XML的四种方式
java解析xml文件四种方式 1.介绍 1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这 ...
随机推荐
- 网络请求失败记录(安卓4g网络下第一次请求特别慢或者失败)
最近app的一次版本上线以后出现4g网络下请求接口特别慢,第一次调用接口非常非常慢或者直接访问失败,后面就正常了,但是WiFi情况下并不会出现这个问题.最主要的是IOS的线上app并没有问题. 开始怀 ...
- mysql数据库基本操作(六)
外键约束 创建外键 前面讲的表单查询都是一张表,但项目中表与表之间是有关联的,比如我们创建的学生表,他们可能在不同班级,不同班级有不同的班主任,他们之间的关系大概是这样的:每一个班主任会对应多个学生 ...
- 10.1综合强化刷题 Day7
noip提高组模拟赛 ...
- SQLite的Pragma语句
SQLite的Pragma语句 Pragma语句是SQLite提供的特有语句.该语句可以查询SQLite的非表数据,还可以修改SQLite的库.在iOS开发中,利用Pragma语句,可以实现很多非 ...
- [LOJ6235]区间素数个数
题目大意: 给定$n(n\leq10^{11})$,求$\pi(n)$. 思路: 计算$\pi$函数有$O(n^{\frac23})$的Lehmer算法,这里考虑$O(\frac{n^{\frac34 ...
- main函数参数
方法1. C/C++语言中的main函数,经常带有参数argc,argv,如下: int main(int argc, char** argv) int main(int argc, char* ar ...
- WinForm 读取Excel 数据显示到窗体中
最近教学中,需要用到WinForm 读取Excel数据,于是就做了一个简单的,废话不多说,直接codding... //读取Excel的帮助类 class SqExcellHelper { publi ...
- 如何部署和运行Scut服务器及游戏:Windows篇
概述 Scut游戏引擎是一个永久免费的全脚本游戏服务器框架,采用MVC框架设计,简化数据库设计和编码工作:降低对开发人员的开发难度:同时提供了丰富的类库和API接口. 一. 安装环境 必须安装的 ...
- Android Studio +MAT 分析内存泄漏实战
对于内存泄漏,在Android中如果不注意的话,还是很容易出现的,尤其是在Activity中,比较容易出现,下面我就说下自己是如何查找内存泄露的. 首先什么是内存泄漏? 内存泄漏就是一些已经不使用的对 ...
- SilverLight-DataBinding-DataTemplates: 三、数据绑定 DataTemplates模板的使用(求助,没有到达实例效果,求高人指点迷津)
ylbtech-SilverLight-DataBinding-DataTemplates: 三.数据绑定 DataTemplates模板的使用 1.A, Data Templates Intro(数 ...