XML
概述
XML是可拓展的标记性语言,主要作用有:
- 用来保存数据,并且这些数据具有自我描述
- 可以作为项目或者模块的配置文件
- 可以作为网络传输数据的格式(如今以JSON为主)
语法
创建一个简单的XML文件,用来描述图书信息
<?xml version="1.0" encoding="UTF-8"?>
<!-- xml声明 version是版本的意思 encoding是编码 -->
<books><!--这是XML注释-->
<book id="SN123123413241"><!--book标签描述一本图书,id属性为图书的编号-->
<name>Java从入门到入坟1</name><!--name标签:图书的名称-->
<author>作者1</author><!--author标签:图书的作者-->
<price>9.9</price><!--price标签:图书的价格-->
</book>
<book id="SN123123413457"><!--book标签描述一本图书,id属性为图书的编号-->
<name>Java从入门到入坟2</name><!--name标签:图书的名称-->
<author>作者2</author><!--author标签:图书的作者-->
<price>19.9</price><!--price标签:图书的价格-->
</book>
</books>
1. 元素
XML元素是指从(且包括)起始标签到(且包括)结束标签的部分
例如:<name>Java从入门到入坟1</name>
XML元素命名规则:
- 名称可以包含字母、数字以及其他字符
- 名称不能以数字或者标点符号开始
- 名称不能包含空格
2. 属性
XML的标签属性与HTML的标签属性非常类似,属性可以提供元素的额外信息;在标签上可以书写属性,一个标签可以书写多个属性,属性值必须用引号引起来
例如:<book id="SN123123413457"></book>中的id属性
XML解析技术
不管是HTML文件还是XML文件,他们都是标记型文档,都可以使用W3C组织指定的dom技术进行解析
早期JDK提供了两种XML解析技术:DOM解析技术和SAX解析技术
DOM解析技术:由W3C组织制定,所有的编程语言都对这个解析技术使用了自己语言的特点进行实现
SAX解析技术(Simple API for XML):以类似事件机制通过回调告诉用户当前正在解析的内容,一行一行读取XML文件进行解析,不会创建大量的dom对象,在内存使用和性能都优于DOM解析技术
第三方解析技术
jdom:在dom基础上进行了封装
dom4j:在jdom基础上进行了封装
pull:用于Android手机开发,与SAX技术类似
1. dom4j解析技术
步骤:
- 加载XML文件创建Document对象
- 通过Document对象拿到根元素对象
- 通过根元素.elements(标签名),可以返回指定标签名的元素对象构成的集合
- 对你想操作的元素进行修改、删除等操作
- 保存
要解析的XML文件内容
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book id="SN123123413241">
<name>Java从入门到入坟1</name>
<author>作者1</author>
<price>9.9</price>
</book>
<book id="SN123123413457">
<name>Java从入门到入坟2</name>
<author>作者2</author>
<price>19.9</price>
</book>
</books>
解析获取Document对象
@Test
public void test1() throws DocumentException {
//创建一个SAXReader输入流,读取xml配置文件,生成Document对象
SAXReader reader = new SAXReader();
//使用reader读取xml文件,返回一个Document对象
Document document = reader.read("src/books.xml");
//打印到控制台,是否创建成功
System.out.println(document);
}
获取标签及其内容
//读取xml文件的内容
@Test
public void test2() throws DocumentException {
//1. 创建SAXReader对象,读取xml文件,获取Document对象
SAXReader reader = new SAXReader();
Document document = reader.read("src/books.xml");
//2. 通过Document对象,获取xml的根元素对象
Element rootElement = document.getRootElement();//Element.asXML() 它将当前元素转换成为String
//3. 通过根元素对象,获取所有的标签对象
//Element.elements(标签名):获取当前元素下的指定的子元素的集合
List<Element> books = rootElement.elements("book");
//4. 遍历每个book标签对象,获取book标签对象中的每个元素
for(Element book : books){
//获取book标签中的name元素对象
Element name = book.element("name");
//获取book标签中的author元素对象
Element author = book.element("author");
//获取book标签中的price元素对象
Element price = book.element("price");
//通过getText()方法获取起始标签和结束标签中的文本内容
System.out.println("书名:" + name.getText() + "\n" + "作者:" + author.getText() + "\n" + "价格:" + price.getText());
}
}
打印内容
书名:Java从入门到入坟1
作者:作者1
价格:9.9
书名:Java从入门到入坟2
作者:作者2
价格:19.9
浙公网安备 33010602011771号