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是以层次结构组织的节点或信息片断的集合.这 ...
随机推荐
- win10+anaconda3+pytorch安装
安装条件:win10+anaconda3+tf-gpu+pytorch 安装完tf-gpu后,安装pytorch. pytorch采用conda安装:见 https://ptorch.com/news ...
- CodeForces 702B Powers of Two【二分/lower_bound找多少个数/给出一个数组 求出ai + aj等于2的幂的数对个数】
B. Powers of Two You are given n integers a1, a2, ..., an. Find the number of pairs of indexes i, ...
- CSU 1777: 大还是小?【模拟/后导0】
293419 roniking 1777 Accepted 2032 0 C++ 2000 2018-04-03 19:21:25 Description 输入两个实数,判断第一个数大,第二个数大还是 ...
- 查看tomcat启动文件都干点啥---Bootstrap.java
在上一章查看tomcat启动文件都干点啥---catalina.bat,说了在catalina.bat中都走了什么流程,最重要的是,我们得出了如下这段命令: _EXECJAVA=start " ...
- ylb:日期和时间函数
ylbtech-SQL Server:SQL Server-日期和时间函数 日期和时间函数. ylb:日期和时间函数 返回顶部 1,日期和时间函数获取(当前)日期 GetDate() 2,提取部分日期 ...
- OSG(OpenSceneGraphic) 渲染引擎架构--整体认识 [转]
原文:http://blog.csdn.net/zangle260/article/details/41123067?utm_source=tuicool 本文参考<<osg最长一帧> ...
- 正确理解hadoop 2.x 的环形缓冲区: (一) MR环形缓冲区的结构
转载:http://blog.csdn.net/HADOOP_83425744/article/details/49560583 http://bigdatadecode.club/MapReduce ...
- springboot + mybatis配置多数据源示例
转:http://www.jb51.net/article/107223.htm 在实际开发中,我们一个项目可能会用到多个数据库,通常一个数据库对应一个数据源. 代码结构: 简要原理: 1)Datab ...
- Arduino MEGA 2560找不到驱动怎么办
刚买了Arduino MEGA 2560(比Arduino UNO稍微高级一点的板子),按照视频一步一步操作(似乎插板子也不太一样,不管他,能插上去就完事了),但是到了代码烧录的时候,点击Tools- ...
- linux 文件删除恢复extundelete
首先要把删除文件所有磁盘分区卸载掉 然后安装yum install -y extundelete *2fs* extundelete /dev/sdb1 --inode #查看sdb1分区下删除的文件 ...