03. XML
一、XML概述
??xml 是可扩展的标记性语言。它可用来保存数据,而且这些数据具有自我描述性。它还可以做为项目或者模块的配置文件。它还可以做为网络传输数据的格式(现在JSON为主)。
二、XML语法
- 文档声明
- <?xml version="1.0" encoding="UTF-8"?> xml声明。
- version是版本的意思,encoding是编码
- <?xml version="1.0" encoding="UTF-8"?> xml声明。
- xml注释
- 元素(标签)
- XML元素必须遵循以下命名规则
- 名称可以含字母、数字以及其他的字符
- 名称不能以数字或者标点符号开始
- 名称不能包含空格
- 名称不建议以字符“xml”(或者XML、Xml)开始
- xml中的元素(标签)也分成单标签和双标签
- 单标签格式:<标签名 属性=”值” 属性=”值” ...... />
- 双标签格式:<标签名 属性=”值” 属性=”值” ......>文本数据或子标签标签名>
- XML元素必须遵循以下命名规则
- xml属性
- xml的标签属性可以提供元素的额外信息,一个标签上可以书写多个属性。每个属性的值必须使用引号引起来。
- 语法规则
- 所有XML元素都须有关闭标签(也就是闭合)
- XML标签对大小写敏感
- XML必须正确地嵌套
- XML文档必须有根元素
- 根元素就是顶级元素,没有父标签的元素,叫顶级元素。
- 根元素是没有父标签的顶级元素,而且是唯一一个才行。
- XML的属性值须加引号
- 文本区域(CDATA区)
- CDATA语法可以告诉xml解析器,CDATA里的文本内容,只是纯文本,不需要xml语法解析
- CDATA 格式:
<?xml version="1.0" encoding="utf-8" ?>
时间简史
霍金
45
果壳中的宇宙
霍金
42
三、XML的解析技术
??xml是可扩展的标记语言。 不管是html文件还是xml文件它们都是标记型文档,都可以使用w3c组织制定的dom技术来解析。
3.1、dom4j解析技术
3.3.1、dom4j编程步骤
- 先加载xml文件创建Document对象
- 通过Document对象拿到根元素对象
- 通过根元素.elelemts(标签名); 可以返回一个集合,这个集合里放着。所有你指定的标签名的元素对象
- 找到你想要修改、删除的子元素,进行相应在的操作
- 保存到硬盘上
??创建一个library目录,并添加dom4j的jar包,并添加到类路径。book.xml的文件内容同上
package star.light;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.junit.Test;
import java.math.BigDecimal;
import java.util.List;
public class Dom4jTest {
@Test
public void test(){
//1、创建一个SAXReader输入流,去读取xml配置文件,生成Document对象
SAXReader saxReader = new SAXReader();
Document document = null;
try {
document = saxReader.read("src/books.xml");
//2、通过Document对象获取根元素
Element rootElement = document.getRootElement();
//3、通过根元素获取book标签对象
//element()和elements()都是通过标签名查找子元素
List books = rootElement.elements("book");
//4、遍历,处理每个book标签转换为Book类
for (Element book:books){
Element nameElement = book.element("name");
//getText()可以获取标签中的文本内容
String nameText = nameElement.getText();
//直接获取指定标签名的文本内容
String priceText = book.elementText("price");
String authorText = book.elementText("author");
String isbnValue = book.attributeValue("isbn");
System.out.println(new Book(isbnValue,nameText,new BigDecimal(priceText),authorText));
}
} catch (DocumentException e) {
e.printStackTrace();
}
}
}
package star.light;
import java.math.BigDecimal;
public class Book {
private String isbn;
private String name;
private BigDecimal price;
private String author;
public Book() {
}
public Book(String isbn, String name, BigDecimal price, String author) {
this.isbn = isbn;
this.name = name;
this.price = price;
this.author = author;
}
public String getIsbn() {
return isbn;
}
public void setIsbn(String isbn) {
this.isbn = isbn;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public BigDecimal getPrice() {
return price;
}
public void setPrice(BigDecimal price) {
this.price = price;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
@Override
public String toString() {
return "Book{" +
"isbn='" + isbn + '\'' +
", name='" + name + '\'' +
", price=" + price +
", author='" + author + '\'' +
'}';
}
}