xml(可扩展的标记性语言),主要用来保存数据,这些数据具有一定的描述功能;还可以作为项目或者模块的配置文件;还可以用于网络传输数据(现在以json为主)


xml示例文件

<?xml version="1.0" encoding="utf-8" ?>
<!--xml文件的声明,标注版本号和xml文件本身的编码-->
<books>
<book sn="sn1244">
<name>时间简史</name>
<author>霍金</author>
<price>75</price>
</book>
<book sn="sn7348732">
<name>百年孤独</name>
<author>加西亚马尔克斯</author>
<price>85</price>
</book>
<book sn="sn3123123" name="三体" author="刘慈欣" />
</books>

xml语法

xml元素是开始标签到结束标签的部分,元素可包含其他元素或文本,元素可有属性,属性必须用引号引起来

xml命名规则:名称可含字母、数字及其他字符,名称不能以数字或标点符号开始,名称不能包含空格

xml文件必须有根元素,根元素是没有父标签的顶级元素且唯一

特殊字符如<用&lt;代替

文本区域(CDATA区),格式为<![CDATA[文本信息]]>,如

<author>
<![CDATA[
<<<<<<<这是不会被解析的文本信息
]]>
</author>

xml解析技术

程序读取xml文件并获得其中内容就称为xml解析

html和xml文件都是标记型文档,都可以用w3c组织制定的dom技术解析,DOM将xml文档看作一个树状结构,document对象都可以表示这两种文档

早期JDK提供了两种解析技术DOM和Sax

第三方的解析:jdom在dom的基础上进行了封装,dom4j对jdom进行了封装


dom4j读取xml文件得到document对象

需要去官网下载

6-xml_封装

导入jar包

6-xml_xml解析_02

6-xml_封装_03

books.xml

<?xml version="1.0" encoding="utf-8" ?>
<books>
<book sn="SN12341232">
<name>辟邪剑谱</name>
<price>9.9</price>
<author>林平之</author>
</book>
<book sn="SN12341231">
<name>葵花宝典</name>
<price>99.9</price>
<author>东方不败</author>
</book>
</books>

Dom4jTest.java

6-xml_封装_04

dom4j解析xml

Book.java

package com.atguigu.pojo;

public class Book {
private String sn;
private String name;
private Double price;
private String author;

public Book() {
}

public Book(String sn, String name, Double price, String author) {
this.sn = sn;
this.name = name;
this.price = price;
this.author = author;
}

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 Double getPrice() {
return price;
}

public void setPrice(Double price) {
this.price = price;
}

public String getAuthor() {
return author;
}

public void setAuthor(String author) {
this.author = author;
}

@Override
public String toString() {
return "Book{" +
"sn='" + sn + '\'' +
", name='" + name + '\'' +
", price=" + price +
", author='" + author + '\'' +
'}';
}
}
// 读取xml文件生成Book类的实例
@Test
public void test2() throws DocumentException {
// 读取books.xml文件,在Junit测试中,相对路径是从模块名开始
SAXReader reader = new SAXReader();
Document document = reader.read("src/books.xml");
// 通过document对象获取根元素
Element rootElement = document.getRootElement();
// System.out.println(rootElement); // org.dom4j.tree.DefaultElement@39ed3c8d [Element: <books attributes: []/>]
// 通过根元素获取全部book标签对象
List<Element> books = rootElement.elements("book");
for(Element book : books) {
// 通过book标签对象获取name标签再获取name标签的文本内容
Element nameElement = book.element("name");
String nameText = nameElement.getText();
// 直接获取子标签的文本内容
String priceText = book.elementText("price");
String authorText = book.elementText("author");
// 获取标签属性值
String snValue = book.attributeValue("sn");
// 转换为Java中的一个实例
System.out.println(new Book(snValue,nameText,Double.parseDouble(priceText),authorText));
}
}