Java眼中的XML--文件读取--1 应用DOM方式解析XML

简介:

初次邂逅XML:

需要解析的XML文件:

这里有两个book子节点。

1、如何进行XML文件解析前的准备工作,另外解析先获取book节点。

这个我后来看懂了:

这个Node的ELEMENT_NODE=1和上面是一样的。

2、使用DOM解析XML文件的属性名和属性值(分两种情况)

第一种,当属性个数是1~N个的时候:

复制代码
 1 public class DOMTest {
 2  3 public static void main(String[] args) {
 4 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
 5 try {
 6 DocumentBuilder db = dbf.newDocumentBuilder();
 7 Document d = db.parse("books.xml");
 8 //1、根据节点名book,获取节点集合  9 NodeList nodelist = d.getElementsByTagName("book");
10 //2、遍历集合中所有的元素(节点) 11 for (int i = 0; i < nodelist.getLength(); i++) {
12 Node node = nodelist.item(i);
13 //3、获取每个节点的属性集合,并输出属性的个数 14 NamedNodeMap attrMap = node.getAttributes();
15 System.out.println("属性的个数是:"+attrMap.getLength());
16 //4、遍历所有属性,并输出属性值 17 for (int j = 0; j < attrMap.getLength(); j++) {
18 Node attr = attrMap.item(j);
19 System.out.println(attr.getNodeName()+":"+attr.getNodeValue());
20  }
21  }
22 } catch (ParserConfigurationException e) {
23 // TODO Auto-generated catch block 24  e.printStackTrace();
25 } catch (SAXException e) {
26 // TODO Auto-generated catch block 27  e.printStackTrace();
28 } catch (IOException e) {
29 // TODO Auto-generated catch block 30  e.printStackTrace();
31  }
32  }
33 }
复制代码

第二种,当节点属性值只有一个的时候,可以这样:

复制代码
 1 public class DOMTest {
 2  3 public static void main(String[] args) {
 4 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
 5 try {
 6 DocumentBuilder db = dbf.newDocumentBuilder();
 7 Document d = db.parse("books.xml");
 8 //1、根据节点名book,获取节点集合  9 NodeList nodelist = d.getElementsByTagName("book");
10 //2、遍历集合中所有的元素(节点),并强制转换为element 11 for (int i = 0; i < nodelist.getLength(); i++) {
12 Element node = (Element) nodelist.item(i);
13 String str = node.getAttribute("id");
14  System.out.println(str);
15  }
16 } catch (ParserConfigurationException e) {
17 // TODO Auto-generated catch block 18  e.printStackTrace();
19 } catch (SAXException e) {
20 // TODO Auto-generated catch block 21  e.printStackTrace();
22 } catch (IOException e) {
23 // TODO Auto-generated catch block 24  e.printStackTrace();
25  }
26  }
27 }
复制代码

上面两种情况的对比归纳,理解的时候,脑子里要有XML节点的图:

3、使用DOM解析XML文件的节点名和节点值

再来看XML的代码:

复制代码
 1 <?xml version="1.0" encoding="UTF-8"?>  2 <bookstore>  3 <book id="1"> 换行符算一个子节点,这里是第一个
 4 <name>冰与火之歌</name> 第二个换行符
 5 <author>乔治马丁</author> 第三个
 6 <year>2014</year> 第四个
 7 <price>89</price> 第五个,所以加上正儿八经的四个节点,一共9个子节点
 8 </book>  9 <book id="2"> 10 <name>安徒生童话</name> 11 <year>2004</year> 12 <price>77</price> 13 <language>English</language> 14 </book> 15 </bookstore>
复制代码

下面进行解析子节点:

获取节点名

获取节点值:

因为一个节点转为Element类型之后,比如<name>冰火之歌</name>中,冰火之歌就不是该节点的值NodeValue而是该节点的子节点。

两种获取子节点的value:


相关文章
|
14小时前
|
Java
Java多线程基础-7:wait() 和 notify() 用法解析
这篇内容探讨了Java中的`wait()`和`notify()`方法在多线程编程中的使用。
5 0
|
18小时前
|
Java 程序员 API
Java 8新特性深度解析:Stream API和Lambda表达式
【5月更文挑战第27天】 在Java 8中,引入了两个重要的新特性:Stream API和Lambda表达式。这两个特性不仅提高了Java程序员的生产力,也使得Java代码更加简洁易读。本文将深入探讨这两个特性的使用方法和优势,以及如何在实际应用中结合使用它们。
|
1天前
|
存储 算法 Java
滚雪球学Java(42):探索对象的奥秘:解析Java中的Object类
【5月更文挑战第17天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
10 2
滚雪球学Java(42):探索对象的奥秘:解析Java中的Object类
|
3天前
|
Java 开发者
探索Java并发编程:Fork/Join框架的深度解析
【5月更文挑战第25天】在多核处理器日益普及的今天,并发编程成为了提升应用性能的关键。Java语言提供了多种并发工具,其中Fork/Join框架是一个高效且强大的工具,用于处理分而治之的任务。本文将深入探讨Fork/Join框架的原理、使用及其在实际应用中的优化策略,旨在帮助开发者更好地利用这一框架以解决复杂的并发问题。
|
3天前
|
存储 算法 Java
深入解析Java虚拟机(JVM):技术原理与性能优化
深入解析Java虚拟机(JVM):技术原理与性能优化
18 1
|
3天前
|
Java 编译器 开发者
Java注解(Annotation)技术深入解析
Java注解(Annotation)技术深入解析
290 1
|
3天前
|
存储 Java
Java语言中的类与对象:深入解析与实战应用
Java语言中的类与对象:深入解析与实战应用
|
3天前
|
设计模式 算法 Java
Java语言中的接口技术深入解析
Java语言中的接口技术深入解析
174 0
|
3天前
|
Java
Java语言中的继承技术深入解析
Java语言中的继承技术深入解析
139 0
|
3天前
|
安全 Java
Java语言中的封装技术深入解析
Java语言中的封装技术深入解析

推荐镜像

更多