1.XML 简介
1.1什么是 xml?
xml 是可扩展的标记性语言。
1.2xml 的作用?
xml 的主要作用有:
1、用来保存数据,而且这些数据具有自我描述性
2、它还可以做为项目或者模块的配置文件
3、还可以做为网络传输数据的格式(现在 JSON 为主)
1.3xml 语法 (具体不再介绍)
- 文档声明。
- 元素(标签)
- xml 属性
- xml 注释
- 文本区域(CDATA 区)
示例:
<?xml version="1.0" encoding="utf-8" ?>
<!-- xml声明 version是版本的意思 encoding是编码 -->
<books>
<book sn="SN001">
<name>java从入门到超神1</name> <!-- book表示一个图书信息 sn属性表示图书序列号-->
<author>李明</author>
<price>66</price>
</book>
<book sn="SN002">
<name>java从入门到超神2</name> <!-- book表示一个图书信息 sn属性表示图书序列号-->
<author>
<!--文本区域(CDATA 区)
CDATA 语法可以告诉 xml 解析器,我 CDATA 里的文本内容,只是纯文本,不需要 xml 语法解析
CDATA 格式: <![CDATA[ 这里可以把你输入的字符原样显示,不会解析 xml ]]>
-->
<![CDATA[
<<<>>>>>>李明
]]>
</author>
<price>66</price>
</book>
<!--xml支持单标签 ,双标签-->
<book sn="SN003" name="java从入门到超神3" author="李明" price="68" />
</books>
2、xml 解析技术介绍
xml 可扩展的标记语言。
不管是 html 文件还是 xml 文件它们都是标记型文档,都可以使用 w3c 组织制定的 dom 技术来解析。
document 对象表示的是整个文档(可以是 html 文档,也可以是 xml 文档)
3、dom4j 解析技术(重点*****)
由于 dom4j 它不是 sun 公司的技术,而属于第三方公司的技术,我们需要使用 dom4j 就需要到 dom4j 官网下载 dom4j 的 jar 包。
3.2、dom4j 目录的介绍:
1)docs 是 文 档 目 录
如何查 Dom4j 的文档
Dom4j 快速入门
2)lib 目录 -----存放第三方jar包
3)src 目录是第三方类库的源码目录
3.3、dom4j 编程步骤:
第一步: 先加载 xml 文件创建 Document 对象
第二步:通过 Document 对象拿到根元素对象
第三步:通过根元素.elelemts(标签名); 可以返回一个集合,这个集合里放着。所有你指定的标签名的元素对象。
第四步:找到你想要修改、删除的子元素,进行相应在的操作 第五步,保存到硬盘上
3.4、获取 document 对象
创建一个 lib 目录,并添加 dom4j 的 jar 包。并添加到类路径。
需要解析的 books.xml 文件内容
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book sn="SN12341232">
<name>辟邪剑谱</name>
<price>9.9</price>
<author>班主任</author>
</book>
<book sn="SN12341231">
<name>葵花宝典</name>
<price>99.99</price>
<author>班长</author>
</book>
</books>
解析获取 Document 对象的代码
第一步,先创建 SaxReader 对象。这个对象,用于读取 xml 文件,并创建 Document
/** dom4j 获取 Documet 对象 */
@Test
public void test1() throws Exception {
//1.创建一个SaxReader输入流,去读取xml配置文件,生成Document对象
SAXReader saxReader = new SAXReader();
//2. 这个对象用于读取 xml 文件,然后返回一个 Document
Document document = saxReader.read("src/books.xml");
// 3.打印到控制台,看看是否创建成功
System.out.println(document);
}
3.5、遍历 标签 获取所有标签中的内容(*****重点)
需要分四步操作:
第一步,通过创建 SAXReader 对象。来读取 xml 文件,获取 Document 对象
第二步,通过 Document 对象。拿到 XML 的根元素对象
第三步,通过根元素对象。获取所有的 book 标签对象
第四步,遍历每个 book 标签对象。然后获取到 book 标签对象内的每一个元素,再通过 getText() 方法拿到起始标签和结 束标签之间的文本内容。
JavaBean:
public class Book {
private String sn;
private String name;
private BigDecimal price;
private String author;
public Book(String sn, String name, BigDecimal price, String author) {
this.sn = sn;
this.name = name;
this.price = price;
this.author = author;
}
public Book() {
}
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 BigDecimal getPrice() {
return price;
}
public void setPrice(BigDecimal 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 + '\'' +
'}';
}
}
@Test
public void test2() throws Exception {
//1.读取xml文件,生成Document对象
SAXReader reader = new SAXReader();
Document document = reader.read("src/books.xml");
//2.通过document对象那个获取根元素
Element rootElement = document.getRootElement();
// System.out.println(rootElement);
//3.通过根元素获取book标签对象
//element()和elements()都是通过标签名查找子元素
List<Element> books = rootElement.elements("book");
//4.遍历,处理每个book标签转换为BOOk类
for (Element book : books){
//把标签对象转换为标签字符串
//方法1(先获取book的子元素,再通过 子元素.getText()获取文本内容)
Element nameElement = book.element("name");
//getText(): 获取标签名的文本内容
String nameText = nameElement.getText();
//System.out.println(nameText);
//方法2:elementText():直接通过标签名获取 标签名内的文本内容
String priceText = book.elementText("price");
String authorText = book.elementText("author");
//获取book的属性值
String snText = book.attributeValue("sn");
System.out.println(new Book(snText, nameText, new BigDecimal(priceText), authorText));//new BigDecimal(priceText): 将String转换为BigDecimal数据
}
}