XML简介
什么是XML?
xml是可扩展的标记语言
XML的作用
主要作用:
1.用来保存数据,而且这些数据具有自我描述性
2.他可以作为项目或者模块的配置文件
3.还可以作为网络传输数据的格式(现在JSON为主)
第一个实例
命名规则
xml 的标签属性和 html 的标签属性是非常类似的,属性可以提供元素的额外信息
在标签上可以书写属性:
个标签上可以书写多个属性。每个属性的值必须使用 引号 引起来的规则和标签的书写规则一致。
XML发展历史
早期JDK为我们提供了两种xml 解折技术DOM 和Sax简介(已经过时,但我们需要知道这两种技术)
dom 解析技术是 W3C组织制定的,而所有的编程语言都对这个解析技术使用了自己语言的特点进行实现。
Java对 dom 技术解析标记也做了实现。
sun公司在JDK5版本对 dom 解析技术进行升级:SAX( Simple API for XL)SAX解析,它跟 W3C制定的解析不太一样。它是以类似事件机制通过回调告诉用户当前正在解析的内容它是一行一行的读取xml文件进行解析的。不会创建大量的 dom 对象。所以它在解析xml的时候,在内存的使用上。和性能上。都优于 Dom 解析。
第三方的解析:
idom 在 dom 基础上进行了封装
dom4j又对 jdom 进行了封装(很多框架都是用dom4j进行解析xml)
pull 主要用在 Android 手机开发,是在跟 sax非常类似都是事件机制解析 xml文件。
这个 Dom4j 它是第三方的解析技术。我们需要使用第三方给我们提供好的类库才可以解析 xml 文件。
XML实例
1.文件结构
2.依赖jar包
依赖资源
3.测试
Book.java
public class Book {
private String sn;
private String name;
private Double price;
private String author;
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 + '\'' +
'}';
}
}
DomTest.java
public class DomTest {
@Test
public void test1() throws DocumentException {
// 创建一个saxReader输入流,去读取xml配置文件,生成Document对象
SAXReader saxReader=new SAXReader();
Document document = saxReader.read("src/books.xml");
System.out.println("document = " + document);
}
/**
* 读取books.xml文件生成Book类
*/
@Test
public void test2(){
// 1.读取books.xml
SAXReader saxReader = new SAXReader();
// 2.通过Document对象获取根元素
Document document=null;
try {
document = saxReader.read("src/books.xml");
} catch (DocumentException e) {
e.printStackTrace();
}
Element rootElement = document.getRootElement();
System.out.println("rootElement = " + rootElement);
// 3.通过根元素获取book标签对象
// element()和elements()都是通过标签名进行查找子元素
List<Element> books = rootElement.elements("book");
// System.out.println("books = " + books);
// 4.遍历,处理每个book标签转换换成Book类
for (Element book :
books) {
Element nameElement = book.element("name");
// asXML()把标签对象转换成标签字符串
// System.out.println(nameElement.asXML());
String text = nameElement.getText();
// System.out.println("text = " + text);
// 获取指定标签李米娜的文本内容
String name = book.elementText("name");
System.out.println("name = " + name);
String sn = book.attributeValue("sn");
String price = book.elementText("price");
String author = book.elementText("author");
Book book1 = new Book(sn, name, Double.parseDouble(price), author);
System.out.println("book1 = " + book1);
}
}
}
4.结果