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方式的更多相关文章

  1. JAVA解析XML之SAX方式

    JAVA解析XML之SAX方式 SAX解析xml步骤 通过SAXParseFactory的静态newInstance()方法获取SAXParserFactory实例factory 通过SAXParse ...

  2. JAVA解析XML文件(DOM,SAX,JDOM,DOM4j附代码实现)

    1.解析XML主要有四种方式 1.DOM方式解析XML(与平台无关,JAVA提供,一次性加载XML文件内容,形成树结构,不适用于大文件) 2.SAX方式解析XML(基于事件驱动,逐条解析,适用于只处理 ...

  3. Java解析XML文件的方式

    在项目里,我们往往会把一些配置信息放到xml文件里,或者各部门间会通过xml文件来交换业务数据,所以有时候我们会遇到“解析xml文件”的需求.一般来讲,有基于DOM树和SAX的两种解析xml文件的方式 ...

  4. java解析XML几种方式

    第一种:DOM. DOM的全称是Document Object Model,也即文档对象模型.在应用程序中,基于DOM的XML分析器将一个XML文档转换成一个对象模型的集合(通常称DOM树),应用程序 ...

  5. java 解析 xml (DOM方法全)

    Java 处理 XML 的三种主流技术及介绍 http://www.ibm.com/developerworks/cn/xml/dm-1208gub/ 这篇文章讲的比较详细,下面我主要介绍 dom方法 ...

  6. java解析XML之DOM解析和SAX解析(包含CDATA的问题)

    Dom解析功能强大,可增删改查,操作时会将XML文档读到内存,因此适用于小文档: SAX解析是从头到尾逐行逐个元素解析,修改较为不便,但适用于只读的大文档:SAX采用事件驱动的方式解析XML.如同在电 ...

  7. python 解析xml 文件: DOM 方式

    环境 python:3.4.4 准备xml文件 首先新建一个xml文件,countries.xml.内容是在python官网上看到的. <?xml version="1.0" ...

  8. 用java操作XML文件(DOM解析方式)

    XML 可扩展标记语言(Extensible Markup Language),是独立于软件和硬件的传输工具. XML的作用: (1)用作配置文件 (2)简化数据共享 (3)简化数据传输 XML DO ...

  9. JAVA解析XML的四种方式

    java解析xml文件四种方式 1.介绍 1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信息片断的集合.这 ...

随机推荐

  1. Mycat 做简单的读写分离(转载)

    大漠小狼的个人空间   http://www.51testing.com/html/34/369434-3686088.html 使用Mycat 做简单的读写分离(一) 原本使用的是amoeba做的读 ...

  2. golang:mgo剖析之Session

    golang操作mongo使用的包是"gopkg.in/mgo.v2",coding过程中需要并发读写mongo数据库,简单观摩了下源码,记录下自己的一些理解,如有错误,敬请斧正. ...

  3. 【spring】spring的事务传播性 hibernate/jpa等的事务隔离性

    spring的注解 @Trancational加在controller层,调用了service层的方法,service层的方法也加了@Trancational注解,这时候就出现了事务的嵌套,也就出现了 ...

  4. 【IntelliJ Idea】idea下hibernate反向生成工具,根据数据表生成实体

    idea插件很齐全,不像ecplise一样.所以直接来步骤吧: 1.选择项目,右键-->Add Frameworks Support-->勾选Hibernate-->勾选Import ...

  5. xml 文件不给提示(以mybatis 的 mapper映射文件为例)

    在xxx.xml 映射文件的头部可以看到 如下: (mybatis generate 自动生成) <!DOCTYPE mapper PUBLIC "-//mybatis.org//DT ...

  6. 决策树之 C4.5

    C4.5 是对 ID3 的一个优化,它依据信息增益率来进行属性选择. 关于决策树.请參见:http://blog.csdn.net/bone_ace/article/details/46299681 ...

  7. 【Python】导入类

    导入单个类 随着不断添加类,可能会使文件变得很长,那么此时,需要将类存储在模块中,然后在主程序导入类即可 book.py class Book(): '''模拟一本书''' def __init__( ...

  8. 常用组件介绍 ---- Layout_weight

      下面这些也可以算是组件 文本区 TextView 文本框 EditText layout  容器 view     千万不要把Layout_weight 与 Layout_width相混淆**** ...

  9. 管理voting disks

     管理voting disks 一.关于voting disk 的一些必需要知道的东西: 11g 曾经我们能够使用dd 命令来备份voting disk ,可是在11g 以后 oracle 不再支 ...

  10. Struts2学习九----------处理结果类型(input)

    © 版权声明:本文为博主原创文章,转载请注明出处 Struts2处理结果类型 - SUCCESS:Action正确的执行完成,返回相应的视图,success是name属性的默认值 - ERROR:表示 ...