I:XML的概述
- 标签的名字可以是自定义的,所以 XML 是可扩展性标记语言
II:XML的作用
- 用来保存数据,而且这些数据具有自我描述性
- 也可以作为项目或者模块的配置文件
- 还可以作为网络传输数据的格式
III:XML的语法
- 标签可分为单标签和双标签
- 标签的属性值必须使用双引号
- 标签名的名字中间不能有空格
- 任何的标签都必须闭合
- 标签名对大小写敏感
- 整个文档必须只有一个根标签
- 特殊的字符要使用特定的转义符号表示
- 纯文本区域 CDATA 区:< ! [ CDATA [ 纯文本区域 ] ] >
IV:XML的解析技术
- 初期的 JDK 为 XML 分别提供了 DOM 和 SAX 技术,但现在已经过时了
- 第三方的解析有 jdom、dom4j、pull,dom4j 是对 jdom 进行了封装
V:XML的解析技术的使用
- 首先要将相应的 dom4j-1.6.1.jar 包放置在 IDEA 的模块下的 lib 目录中
- 将相应的 xml 文件放置在模块下的 src 目录中
- 新建一个 Java 类,其中的属性与 xml 根元素内部的标签名个数一致
- xml 文件的配置如下
<?xml version="1.0" encoding="UTF-8" ?>
<books>
<book sn="sn325687209879">
<name>Java从入门到放弃</name>
<author>班主任</author>
<price>9.9</price>
</book>
<book sn="sn325687209880">
<name>JavaScript从入门到入土</name>
<author>班长</author>
<price>99.99</price>
</book>
</books>
- java 类的配置如下
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 +
'}';
}
}
- 新建一个测试方法,填写如下代码
- 先获取一个 saxReader 输入流对象
- 使用 saxReader 对象读取 xml 文件,Junit中,相对路径是从当前模块名开始
- 通过 document 对象获取根标签对象
- 再通过根标签获取 book 标签对象
- 遍历,处理每一个 book 标签,通过 getText() 方法可以获取标签中的文本内容
- 也可以直接通过 elementText() 直接获取标签中的文本内容
public class Dom4j {
@Test
public void testDom4j() throws DocumentException {
SAXReader saxReader = new SAXReader();
Document document = saxReader.read("src/books.xml");
Element rootElement = document.getRootElement();
List<Element> books = rootElement.elements("book");
for (Element book : books) {
String snText = book.attributeValue("sn");
Element name = book.element("name");
String nameText = name.getText();
String authorText = book.elementText("author");
String priceText = book.elementText("price");
System.out.println(new Book(snText, nameText, authorText, Double.parseDouble(priceText)));
}
}
}