XML
什么是xml文件?
- xml是可扩展性的标记语言,可以使用w3c定义的dom技术来解析
XML文件的作用:
- 可以用它来保存数据,而且这些数据具有描述性
- 用来做项目或者模块的配置文件
- 作为网络传输数据的格式(现以JSNO为主)
XML中标签的命名规则
- 字母、数字以及其他字符,不能有空格隔开
- 每个属性的 值 必须用引号引起来
- 正确的嵌套,和HTML一样
- 标签要有闭合
- 只能有一个根元素(顶级标签),没有父元素的标签就是根元素
- xml对大小写敏感
- XML中的特殊符号和html的一样
XML的注释:
- 和html一样的注释
- <![CDATA[ 文本内容 ]]> 解析器不会解析,相当于是多行文本注释,不能两个进行嵌套
第三方解析
document 对象表示的是整个文档(可以是 html 文档,也可以是 xml 文档) 早期 JDK 为我们提供了两种 xml 解析技术 DOM 和 Sax 简介(已经过时,但我们需要知道这两种技术) dom 解析技术是 W3C 组织制定的,而所有的编程语言都对这个解析技术使用了自己语言的特点进行实现。 Java 对 dom 技术解析标记也做了实现。
sun 公司在 JDK5 版本对 dom 解析技术进行升级:SAX( Simple API for XML ) SAX 解析,它跟 W3C 制定的解析不太一样。它是以类似事件机制通过回调告诉用户当前正在解析的内容。 它是一行一行的读取 xml 文件进行解析的。不会创建大量的 dom 对象。 所以它在解析 xml 的时候,在内存的使用上。和性能上。都优于 Dom 解析。
第三方的解析:
jdom 在 dom 基础上进行了封装 、
dom4j 又对 jdom 进行了封装。
pull 主要用在 Android 手机开发,是在跟 sax 非常类似都是事件机制解析 xml 文件。
这个 Dom4j 它是第三方的解析技术。我们需要使用第三方给我们提供好的类库才可以解析 xml 文件。
Dom4j类库的使用
解压后
目录介绍
-
docs目录是第三方类库的学习文档
进入docs中打开index.html文件
找到Quick start快速入门实例
-
lib目录是dom4j需要依赖其他第三方的类库
-
src 目录是第三方类库的源码目录(dom4j的源码)
编程步骤
-
导入jar包
-
创建xml文件,写入内容
-
new SAXReader()对象,通过对 read()方法 得到document对象
-
通过 document对象.getRootElement()方法 得到根元素(顶级标签)
-
根元素再通过 elements(“标签名”)方法 得到它的子元素的集合(不包括它)
-
遍历
-
第一种方式是用Element类型接收
通过 element(“标签名”)方法 得到指定的标签对象
-
第二种是拿到标签中的文本内容
通过 elementText()方法 得到一个字符串文本
代码实现:
-
public static void main(String[] args) {
// 得到SAXReader对象
SAXReader sr = new SAXReader();
// 用SAXReader对象的read()方法得到Document对象
Document document = null;
try {
document = sr.read("XML\\books.xml");
} catch (DocumentException e) {
e.printStackTrace();
}
// System.out.println(document);
// 通过document对象拿到xml的根元素对象(books)
Element rootElement = document.getRootElement();
// Element.elements(标签名) 它可以得到当前元素下的指定子元素的集合(books标签下的所有子元素)
// element(标签名) 它可以得到当前元素的指定子元素
List<Element> books = rootElement.elements("book");
// 遍历标签。获得标签中的所有内容
// 第一种获取方式
for (Element book : books) {
// 测试:asXML()方法将整个document对象变成文本输出
// System.out.printf( book.asXML());
// 获得book下的name、price、author元素对象
Element name = book.element("name");
Element price = book.element("price");
Element author = book.element("author");
// attributeValue("属性名")获得属性值
String bh = book.attributeValue("bh");
//通过getText()方法得到标签之间的文本内容
System.out.println("书名:"+ "编号"+ bh +name.getText() + "价格:" + price.getText()
+ "作者:" + author.getText());
}
// 遍历标签。获得标签中的所有内容
// 第二种方式:将值封装到对象里
for (Element book : books) {
// elementText()方法 直接得到标签里面的文本内容
String name = book.elementText("name");
String price = book.elementText("price");
String author = book.elementText("author");
String bh = book.elementText("bh");
System.out.println(new Book(name, Double.parseDouble(price), author, bh));
}
}
输出结果