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. 牛客网 Wannafly挑战赛8 B.LBJX的三角形

    B-LBJX的三角形 链接:https://www.nowcoder.com/acm/contest/57/B来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32768K, ...

  2. Codeforces Gym100971 C.Triangles-组三角形 (IX Samara Regional Intercollegiate Programming Contest Russia, Samara, March 13)

    这个题就是组三角形,从给出的数组里任选两个和未知的边组三角形. 任意两边之和大于第三边,记住这个就可以了. 代码: 1 #include<cstdio> 2 #include<cst ...

  3. Codeforces 785D Anton and School - 2(推公式+乘法原理+组合数学)

    题目链接 Anton and School - 2 对于序列中的任意一个单括号对(), 左括号左边(不含本身)有a个左括号,右括号右边(不含本身有)b个右括号. 那么答案就为 但是这样枚举左右的()的 ...

  4. Axure基础操作

    一  简介 Axure RP就是一个快速原型(Rapid Prototyping)设计工具. 快速原型(快速模型demo)在真正的开发之前,构造一个原型.把需求模块进行落实.实现部分交互. 二  Ax ...

  5. Spring MVC的各种参数绑定方式(请求参数用基础类型和包装类型的区别)(转)

    1.基本数据类型(以int为例,其他类似): Controller代码: @RequestMapping("saysth.do") public void test(int cou ...

  6. Linux下防火墙iptables用法规则详及其防火墙配置

    转:http://www.linuxidc.com/Linux/2012-08/67952.htm iptables规则 规则--顾名思义就是规矩和原则,和现实生活中的事情是一样的,国有国法,家有家规 ...

  7. Esper epl语句实验

    基础代码见下,下文列举的实验都是在此程序基础上改动. all,snapshot,first String epl = "select * from appTable.win:time(5 s ...

  8. java 环境变量配置 Mac

    大家在windows里面配置JDK环境变量很容易,但是如果要在mac里面配置JDK环境变量和windows里面有所不同,具体如下: 第一: mac OS里面自带jdk,不过是1.6的版本,现在很多人使 ...

  9. 学习日记之享元模式和Effective C++

    享元模式(Flyweight):运用共享技术有效地支持大量细粒度的对象. (1),享元模式能够避免大量很相似的开销.在程序设计中,有时须要生成大量细粒度的类实例来表示数据.假设能发现这些实例除了几个參 ...

  10. AutoIt3常见问题解答

    Q1 如何调试脚本? MsgBox(0,"测试",$var) ConsoleWrite("var=" & $var & @CRLF)   Q2 ...