1. XML简介
- xml是可扩展的标记行语言
- 主要作用:用来保存数据,而且这些数据具有自我描述性
- 还可以作为项目或模块的配置文件
- 还可以做网络传输数据的格式(but现在以JSON为主了)
2. XML语法
2.1 文档声明
<?xml version="1.0" encoding="UTF-8" ?>
<books>
<book sn="SN12345">
<name>时间简史</name>
<author>霍金</author>
<price>199</price>
</book>
<book sn="SN3333">
<name>百科大全</name>
<author>铁柱</author>
<price>39</price>
</book>
</books>
2.2 元素(标签)
- 名称可以含字母、数字以及其他的字符
- 名称不能以数字或标点符号开始
- 不能以xml开始
- 不能包含空格
2.3 XML属性
- xml标签属性和html的标签属性非常类似,属性可以提供元素的额外信息
- 每个属性的值必须使用引号引起来
2.4 语法规则
- 所有xml元素都必须关闭标签(闭合)
- xml对大小写敏感
- 必须正确嵌套
- 必须有根元素
- 特殊字符 < >
- CDATA区 <![CDATA[<<<<<<<<<<<<<]]>
3. xml解析技术介绍
- 早期JDK为我们提供了两种xml解析技术DOM和Sax(现已过时)
- dom解析技术是W3C制定的,Java对dom技术解析标记也做了实现
- sun公司在JDK5对dom解析技术进行了升级SAX(Simple API for XML),跟W3C制定的解析不太一样,是以类似事件机制通过回调告诉用户当前正在解析的内容,是一行一行的读取解析,不会创建大量dom对象。在内存使用性能上都优于DOM解析
- 第三方的解析:jdom在dom基础上封装,dom4j又对jdom进行封装,pull主要用于安卓开发(类似sam)
4. dom4j
public class Book {
private String sn;
private String name;
private String author;
private Double price;
@Override
public String toString() {
return "Book{" +
"sn='" + sn + '\'' +
", name='" + name + '\'' +
", author='" + author + '\'' +
", price=" + price +
'}';
}
public Book(String sn, String name, String author, Double price) {
this.sn = sn;
this.name = name;
this.author = author;
this.price = price;
}
public Book() {
}
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;
}
}
public class Dom4jTest {
@Test
public void test1() throws DocumentException {
SAXReader saxReader = new SAXReader();
Document document = saxReader.read("./xml/books.xml");
System.out.println(document);
}
@Test
public void test2() throws DocumentException {
SAXReader reader = new SAXReader();
Document document = reader.read("./xml/books.xml");
Element rootElement = document.getRootElement();
System.out.println(rootElement);
List<Element> books = rootElement.elements("book");
for (Element book : books) {
Element name = book.element("name");
String nameText = name.getText();
String author = book.elementText("author");
String price = book.elementText("price");
String sn = book.attributeValue("sn");
Book bookIn = new Book(sn, nameText, author, Double.parseDouble(price));
System.out.println(bookIn);
}
}
}