XML
XML简介
什么是xml?xml有什么作用?
答:xml是可扩展的标记语言(标签是自定义的),并且具有以下作用
- 其可以用来保存数据,而且这些数据具有自我描述性。
- 而且其还可以作为项目或者模块的配置文件。
- 还可以作为网络传输数据的格式(现在以JSON为主)。
XML语法
文档声明
<?xml version="1.0" encoding="utf-8" ?>
<!-- xml声明 version是版本的意思 encoding是编码 -->
<books> <!-- 这是xml注释 -->
<book id="SN123123413241"> <!-- book标签描述一本图书 id属性描述 的是图书 的编号 -->
<name>java编程思想</name> <!-- name标签描述 的是图书 的信息 -->
<author>华仔</author> <!-- author单词是作者的意思 ,描述图书作者 -->
<price>9.9</price> <!-- price单词是价格,描述的是图书 的价格 -->
</book>
<book id="SN12341235123"> <!-- book标签描述一本图书 id属性描述 的是图书 的编号 -->
<name>葵花宝典</name> <!-- name标签描述 的是图书 的信息 -->
<author>班长</author> <!-- author单词是作者的意思 ,描述图书作者 -->
<price>5.5</price> <!-- price单词是价格,描述的是图书 的价格 -->
</book>
</books>
相当于构建了图书类books
,图书中的每一本书book
都有对应的id
,name
,author
,price
作为每一本书的属性。
xml注释
元素(标签)
单标签和双标签都可以支持
xml属性
属性值应当用引号引用起来
文本区域(CDATA区)
CDATA语法可以告诉xml解析器,CDATA里的文本内容是纯文本,不需要xml语法解析
<![CDATA][
<><><>M<><<> <!-- 在这里的文字都会识别成为text,而不需要使用转义字符-->
]>
XML解析技术介绍
xml是可扩展标记语言,不管是html文件还是xml文件都是标记性文档,都可以使用w3c组织指定的dom技术来解析
XML DOM
DOM 把 XML 文档视为一种树结构。通过这个 DOM 树,可以访问所有的元素。可以修改它们的内容(文本以及属性),而且可以创建新的元素。元素,以及它们的文本和属性,均被视为节点。
XML的DOM和HTML的DOM很像,使用方法也类似,区别在于html中的文件是document
,而xml中的文件是xmlDoc
早期JDK提供了两种xml解析技术DOM和Sax简介( 但这两种都已经过时)。
- dom解析技术是W3C组织指定的,而所有的编程语言都对这个解析技术使用了自己语言的特点进行实现(java也不例外)。sun公司在JDK5中对dom解析技术进行了升级——Sax解析技术
- SAX解析技术和W3C制定的解析技术不太一样,其不需要像dom一样将整个文件构建成一棵文件树,数的每一个元素都是一个对象,而是读一行解析一行,并通过回调告诉用户当前正在解析都内容,不需要创建大量的dom对象从而节省了内存。
目前常用的第三方解析技术:(需要导入类库)
- jdom在dom基础上进行了封装
- dom4j又对jdom进行了封装
dom4j解析技术
Dom4j类库的使用
编程步骤
Step0:创建一个lib目录,并导入dom4j类库jar包,添加到类路径
Step1:先加载xml文件创建Document对象
Step2:通过Document对象拿到根元素对象
Step3:通过根元素.element(标签名);可以返回一个集合,这个集合中存放着所有指定标签名的元素对象
Step4:找到想要执行操作的子元素完成对应的操作
Step5:将结果保存到硬盘上
代码实践
从book.xml中读取内容并转换成对应的book类,执行源码如下所示:
public class Dom4jText {
@Test
public void test1() throws Exception {
SAXReader saxReader = new SAXReader();
Document document = saxReader.read("src/books.xml");
System.out.println(document);
}
/**
* 读取book.xml文件生成Book类
*/
@Test
public void test2() throws Exception {
// 1. 读取book.xml文件
SAXReader saxReader = new SAXReader();
Document document = saxReader.read("xml/books.xml");
// 2. 通过Document对象获取根元素
Element rootElement = document.getRootElement();
// 3. 通过根元素获取book标签对象
// element()和elements()都是通过标签名查找,如果希望找多个就用后者
List<Element> books = rootElement.elements("book");
// 4. 遍历,处理book标签转化为book类
for (Element book: books) {
// asXML()表示把标签对象,转换为标签字符串
//System.out.println(book.asXML());
// 这里选择使用element()选择某一个单一的标签元素
Element name = book.element("name");
// 1. 利用getText获取标签中的文本内容
String nameText = name.getText();
// 2. 利用elementText()获取标签名中的内容
String authorText = book.elementText("author");
String priceText = book.elementText("price");
// 最后再获取属性值
String snValue = book.attributeValue("sn");
System.out.println(new book(snValue, nameText, Double.parseDouble(priceText),authorText));
}
}
}
输出结果