一、XML简介

1. 什么是xml?

xml 是可扩展的标记性语言

2. xml的作用?

  • 用来保存数据,而且这些数据具有自我描述性
  • 它还可以做为项目或者模块的配置文件
  • 还可以做为网络传输数据的格式(现在 JSON 为主)

二、XML语法

首先创建一个xml文件

<?xml version="1.0" encoding="UTF-8" ?>
<!--
文件的声明
version="1.0" 表示xml的版本
encoding="UTF-8" 表示xml文件本身的编码
-->

图书有 标识,书名,有作者,价格的信息

<?xml version="1.0" encoding="UTF-8" ?>
<!--
文件的声明
version="1.0" 表示xml的版本
encoding="UTF-8" 表示xml文件本身的编码
--> <!-- 多个图书信息-->
<books> <!--一个图书的基本信息-->
<book sn="SN123454321"> <!--属性值-->
<name>雍正王朝</name>
<author>二月河</author>
<price>99</price>
</book> <book sn="SN987654321">
<name>康熙大帝</name>
<author>二月河</author>
<price>99</price>
</book>
</books>
  • 注释和html一样
  • 其他的基本上看看就懂了

注意:

  • XML 文档必须有根元素,并且是唯一的,就如上面的books一样,

三、XML解析

这里主要就使用dom4j技术来解析

首先需要到官网找到这个jar包,直接复制到当前的模块下即可

1. Dom4j编程步骤

  • 先加载 xml 文件创建 Document 对象
  • 通过 Document 对象拿到根元素对象
  • 通过根元素.elelemts(标签名); 可以返回一个集合,这个集合里放着。所有你指定的标签名的元素对象
  • 找到你想要修改、删除的子元素,进行相应在的操作
  • 保存到硬盘上或者其他地方

2. 获取document对象

1. 首先创建一个lib包,直接把网上找到的dom4j的jar包复制到lib下,然后

2. 写一个需要解析的books.xml文件

<?xml version="1.0" encoding="UTF-8" ?>

<books>
<book sn="SN123454321">
<name>雍正王朝</name>
<author>二月河</author>
<price>99</price>
</book> <book sn="SN987654321">
<name>康熙大帝</name>
<author>二月河</author>
<price>99</price>
</book>
</books>

3. 获取Document对象的代码

@Test
public void test1() throws DocumentException { // 1. 先创建一个SAXReader对象
SAXReader saxReader = new SAXReader();
// 2. 这个对象用来读取xml文件,返回一个document
Document read = saxReader.read("src/books.xml");
// 3. 打印到控制台,查看是否成功
System.out.println(read); }

3. 遍历标签获取内容

需要分四步操作:

  • 通过创建 SAXReader 对象。来读取 xml 文件,获取 Document 对象
  • 通过 Document 对象。拿到 XML 的根元素对象
  • 通过根元素对象。获取所有的 book 标签对象
  • 遍历每个 book 标签对象。然后获取到 book 标签对象内的每一个元素,再通过 getText() 方法拿到起始标签和结 束标签之间的文本内容

首先写一个Book类,用于存放数据

package com.md.java;
/**
* @author MD
* @create 2020-07-24 8:45
*/
public class Book {
private String sn;
private String name;
private String author;
private Double price; public Book() {
} public Book(String sn, String name, String author, Double price) {
this.sn = sn;
this.name = name;
this.author = author;
this.price = price;
} public String getSn() {
return sn;
} public void setSn(String sn) {
this.sn = sn;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getAuthor() {
return author;
} public void setAuthor(String author) {
this.author = author;
} public Double getPrice() {
return price;
} public void setPrice(Double price) {
this.price = price;
} @Override
public String toString() {
return "Book{" +
"sn='" + sn + '\'' +
", name='" + name + '\'' +
", author='" + author + '\'' +
", price=" + price +
'}';
}
}

读取xml文件中的内容,xml文件就是上面的books.xml

    /**
* 读取books.xml文件生成的Book类
*/
@Test
public void test2() throws DocumentException {
// 1. 读取文件,在Junit测试中,相对路径是从模块名开始的
SAXReader saxReader = new SAXReader();
Document document = saxReader.read("src/books.xml"); // 2. 通过Document对象获取根元素
Element rootElement = document.getRootElement();
//System.out.println(rootElement); // 3. 通过根元素读取book标签对象
// element()和elements()都是通过标签名查找子元素
List<Element> books = rootElement.elements("book"); // 4. 遍历处理book标签转换为Book类
for (Element book:books){
// asXML()把标签对象转换为标签字符串
// System.out.println(book.asXML()); // 5. 获取到了这个标签
Element nameElement = book.element("name");
// 获取这个标签的文本内容
String name = nameElement.getText(); // 或者可以直接获取标签里的文本内容
String price = book.elementText("price");
String author = book.elementText("author"); // 获取属性值
String sn = book.attributeValue("sn"); // 获取完成之后就可以生成了,注意价格是double类型的
System.out.println(new Book(sn,name,author,Double.parseDouble(price))); } }

最新文章

  1. how to use ldid
  2. [转载] Android Bander设计与实现 - 设计篇
  3. java 24 - 2 GUI之监听机制和适配器改进窗口关闭
  4. [代码片段]YEAH!连通域标记和计数
  5. 关于Python中数据对象的可变性
  6. UDP/TCP通信小记
  7. 【如何快速的开发一个完整的 iOS 直播 app】(美颜篇)
  8. td内容自动换行 ,td超过宽度显示点点点&hellip; , td 使用 overflow:hidden 无效,英文 数字 不换行 撑破div容器
  9. C++_快速排序
  10. ThinkPHP3.1 常量参考
  11. 恢复Linux下被误删除的文件(笔记)
  12. hdu 4790 Just Random 神奇的容斥原理
  13. 原创:路由配置实践 两个局域网主机的互连 VM linux
  14. Oracle12c_安装2——安装篇
  15. Istio入门实战与架构原理——使用Docker Compose搭建Service Mesh
  16. Lucene实现自己的英文空格小写分词器
  17. python3内存存储几种数据类型对差异
  18. SQL多结果集导出Excel
  19. sap 调试工具,修改变量值
  20. Getting started with Processing 第七章总结

热门文章

  1. 基础的markdown用法
  2. git和github入门指南(3.1)
  3. webpack入门进阶(3)
  4. 使用scrapy实现去重,使用Redis实现增量爬取
  5. Install fail! Error: EBUSY: resource busy or locked, rename
  6. post发送请求参数注意的问题
  7. conda+豆瓣源配置tensorflow+keras环境
  8. 阿里云安全组规则授权对象设置为固定IP段访问
  9. angular入门--filter搜索
  10. flex布局语法+实例