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:


相关文章
|
2天前
|
Java
并发编程之线程池的应用以及一些小细节的详细解析
并发编程之线程池的应用以及一些小细节的详细解析
16 0
|
16天前
|
XML JavaScript 前端开发
xml文件使用及解析
xml文件使用及解析
|
2天前
|
XML Java 数据库连接
Javaweb之Mybatis的XML配置文件的详细解析
Javaweb之Mybatis的XML配置文件的详细解析
13 0
|
2天前
|
JavaScript 前端开发 UED
深入解析JavaScript原生操作DOM技术
【4月更文挑战第22天】本文深入探讨JavaScript原生DOM操作技术,包括使用`getElement*`方法和CSS选择器获取元素,借助`createElement`与`appendChild`动态创建及插入元素,修改元素内容、属性和样式,以及删除元素。通过掌握这些技术,开发者能实现页面动态交互,但应注意避免过度操作DOM以优化性能和用户体验。
|
5天前
|
XML C# 数据格式
C# 解析XML文件
C# 解析XML文件
14 1
|
8天前
|
Java API 数据库
深入解析:使用JPA进行Java对象关系映射的实践与应用
【4月更文挑战第17天】Java Persistence API (JPA) 是Java EE中的ORM规范,简化数据库操作,让开发者以面向对象方式处理数据,提高效率和代码可读性。它定义了Java对象与数据库表的映射,通过@Entity等注解标记实体类,如User类映射到users表。JPA提供持久化上下文和EntityManager,管理对象生命周期,支持Criteria API和JPQL进行数据库查询。同时,JPA包含事务管理功能,保证数据一致性。使用JPA能降低开发复杂性,但需根据项目需求灵活应用,结合框架如Spring Data JPA,进一步提升开发便捷性。
|
11天前
|
SQL API 数据库
Python中的SQLAlchemy框架:深度解析与实战应用
【4月更文挑战第13天】在Python的众多ORM(对象关系映射)框架中,SQLAlchemy以其功能强大、灵活性和易扩展性脱颖而出,成为许多开发者首选的数据库操作工具。本文将深入探讨SQLAlchemy的核心概念、功能特点以及实战应用,帮助读者更好地理解和使用这一框架。
|
13天前
|
机器学习/深度学习 分布式计算 BI
Flink实时流处理框架原理与应用:面试经验与必备知识点解析
【4月更文挑战第9天】本文详尽探讨了Flink实时流处理框架的原理,包括运行时架构、数据流模型、状态管理和容错机制、资源调度与优化以及与外部系统的集成。此外,还介绍了Flink在实时数据管道、分析、数仓与BI、机器学习等领域的应用实践。同时,文章提供了面试经验与常见问题解析,如Flink与其他系统的对比、实际项目挑战及解决方案,并展望了Flink的未来发展趋势。附带Java DataStream API代码样例,为学习和面试准备提供了实用素材。
34 0
|
XML Java 数据格式
java之DocumentBuilderFactory解析xml(2)
java之DocumentBuilderFactory解析xml(2)
229 0

推荐镜像

更多