XML 入门


XML的主要作用

  1. 用来保存数据,将数据与表现分离
  2. 项目或者模块的配置文件
  3. 可以作为网络传输数据的格式(现在以JSON为主)

元素(标签)

  • 大致格式与html类似
  • 标签名由字母数字或其他字符组成大小写敏感可以包含中文但不能包含空格
  • 标签有属性,分为基本属性与事件属性(XML对属性的解析不太友好所以尽量用元素代替属性的表示)

文本域

<![CDATA[ ]]> 在第二层中括号中写下的值会被当成纯文本执行即不用担心特殊字符的困扰

语法要求

  • XML 文档必须有一个根元素
  • XML元素都必须有一个关闭标签
  • XML 标签对大小写敏感
  • XML 元素必须被正确的嵌套
  • XML 属性值必须加引号

XML解析技术

xml文件可以用类似html的DOM技术来解析

sun公司对XML在JDK5中对dom技术升级为sax技术(simple APL for XML)通过一行一行读取解析的技术提高了内存与性能

第三方解析:

​ jdom在dom基础上进行了封住

dom4j对jdom进行了封装

​ pull主要用于Android手机开发,其使用类似sax的机制解析xml

在Java下使用Dom4j解析XML文件

  1. 先将Dom4j-xxx.xxx.jar包添加到类路径下

  2. 创建一个 books.xml 文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?xml version="1.0" encoding="UTF-8" ?>
<books>
<book sn="001">
<name>海的女儿</name>
<author>安徒生</author>
<price>0.43</price>
</book>
<book sn="002">
<name>故事新编</name>
<author>鲁迅</author>
<price>0.31</price>
</book>
</books>

  1. 然后创建一个 SAXReader 示例去读取 XML 配置文件,并生成Document对象
1
2
3
SAXReader reader = new SAXReader();
Document document = reader.read(new File("src/books.xml"));
// Document document = reader.read("src/books.xml"); //效果相同
  1. 使用 getRootElement() 去获取Document对象的根节点
1
Element rootEle = document.getRootElement();
  1. 使用Dom4j的解析方法解析获得的根节点(类似于用 js 的解析 html 文档)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// elements()获取根节点的所有子节点
List<Element> bookEles = rootEle.elements();
// 遍历子节点
for (Element book : bookEles) {
// element()获取子节点指定的子元素
Element nameElement = book.element("name");
// getText()获取子元素的文本内容
String nameText = nameElement.getText();
// elementText()直接获取元素的文本内容
String authorText = book.elementText("author");
String priceText = book.elementText("price");
// attributeValue()直接获取元素的属性值
String snValue = book.attributeValue("sn");
}