1.XML简介
1.什么是xml
xml是可扩展的标记性语言
2.xml的主要作用
- 用来保存数据,而且这些数据具有自我描述性
- 它还可以做为项目或者模块的配置文件
- 还可以做为网铬传输数据的格式(现在JSON为主)
2.XML语法
基本与html一样:
- xml也有单标签和双标签
- xml的标签属性和html的标签属性是非常类似的,性可以提供元素的颜外信息
- xml元素都须有关闭标签(也就是闭合)
- xml标签对大小写敏感
- xml文档必须有根元素(没有父标签的顶级元素,且根元素是唯一的)
- xml中的特殊字符(> <等)
- xml的文本区域: <![CDATA[这里可以把你输入的字符原样显示,不会解析xml]]>
<?xml version="1.0" encoding="utf-8" ?>
<!--
<?xml version="1.0" encoding="utf-8" ?>
以上为xml文件的声明;
version: 为xml的版本;
encoding: 为xml本身的编码
-->
<books> <!--books表示多个图书信息-->
<book sn="SN12345567"> <!--book表示一个图书信息,sn表示图书序列号-->
<name>时间简史</name> <!--name标签表示书名-->
<author>霍金</author> <!--,author表示作者-->
<price>75</price> <!--price表示价格-->
</book>
<book sn="SN12345759">
<name>数据结构与算法</name>
<author>xx</author>
<price>60</price>
</book>
</books>
3.xml解析技术介绍
不管是html文件还是xml文件它们都是标记型文档,都可以使用w3c组织制定的dom技术来解析。
dom解析技术是W3C组织制定的,而所有的编程语言都对这个解析技术使用了自己语言的特点进行实现。Java对dom技术解析标记也做了实现。
第三方的解析:
jdom在dom基础上进行了封装、dom4j 又对jdom进行了封装。pulI主要用在Android手机开发,是在跟sax非常类似都是事件机制解析xml文件。
这个Dom4j它是第三方的解析技术。我们需要使用第三方给我们提供好的类库才可以解析xml文件
4.使用dom4j解析xml
public class book {
private String sn;
private String name;
private double price;
private String author;
public book(String sn, String name, double price, String author) {
this.sn = sn;
this.name = name;
this.price = price;
this.author = author;
}
@Override
public String toString() {
return "book{" +
"sn='" + sn + '\'' +
", name='" + name + '\'' +
", price=" + price +
", author='" + author + '\'' +
'}';
}
}
<?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>
public class main {
@Test
public void test1() throws DocumentException {
// 1.创建SAXReader输入流,去读取xml配置文件,生成Document对象
SAXReader saxReader = new SAXReader();
Document read = saxReader.read("src/books.xml");
System.out.println(read);
}
/**
* 读取 books.xml文件生成 book类
* test的测试中,相对路径是从当前模块开始;
*/
@Test
public void test2() throws DocumentException {
//1读取book5.xmL文件
SAXReader saxReader = new SAXReader();
Document document = saxReader.read("src/books.xml");
//2通过Document对象获取根元
Element rootElement = document.getRootElement();
//3通过根元素获取b0ok标签对象
/* element和 elements都是通过标签名查找子元素 */
/* element返回Element;elements返回List */
List<Element> books = rootElement.elements("book");
//4遍历,处理每个book标签转换为Book类
for (Element book : books) {
/* asXML()方法把标签对象 转化成 标签字符串 */
// Element name = book.element("name");
/* getText()方法可以获取标签字符串中的文本内容 */
// String text = name.getText();
/* 获取指定标签名的文本内容 */
String name = book.elementText("name");
String price = book.elementText("price");
String author = book.elementText("author");
/* 获取属性 */
String sn = book.attributeValue("sn");
System.out.println(new book(sn,name,Double.parseDouble(price),author));
}
}
}