xml
一、XML 简介
什么是 xml?
xml 是可扩展的标记性语言。
xml 的作用?
1.用来保存数据,而且这些数据具有自我描述性;
2.它可以作为项目或者模块的配置文件;
3.还可以作为网络传输数据的格式(现在以JSON为主)。
二、xml 语法
1、文档声明
①创建一个XML文件
输入文件名:
②books.xml文件存放图书信息。(图书有 id 属性 表示唯一 标识,书名,有作者,价格的信息)
<?xml version="1.0" encoding="utf-8" ?> <!--xml的声明,version:版本 encoding:编码--> <books> <book id="sn7384378"><!-- book用来描述一本书,id属性描述图书的编号 --> <name>java编程思想</name> <author>小张</author> <price>9.9</price> </book> <book id="sn3785738"> <name>西游记</name> <author>吴承恩</author> <price>99</price> </book> </books>
在浏览器中可以查看到文档:
2、xml 注释
xml的注释和HTML是一样的:<!-- 注释内容 -->
3、元素(标签)
xml元素指的是从开始标签到结束标签的部分。元素可以包含其它元素、文本或两者的混合物。元素也可以拥有属性。
①名称可以含字母、数字以及其他的字符;
②名称不能以数字或标点符号开始;
③名称不能包含空格;
单标签: <标签名 属性名="属性值" /> 双标签: <标签名 属性名="属性值"> 封装的数据 </标签名>
4、xml 属性
xml 的标签属性和 html 的标签属性是非常类似的,属性可以提供元素的额外信息。
5、语法规则
①所有的xml标签,无论单标签还是双标签,都必须闭合。
②xml标签对大小写敏感。
③xml标签必须正确的嵌套。
④XML 文档必须有根元素
根元素就是顶级元素,
⑤xml的属性值必须加引号。
⑥xml中的特殊字符:
⑦文本区域(CDATA 区)
CDATA 语法可以告诉 xml 解析器,我 CDATA 里的文本内容,只是纯文本,不需要 xml 语法解析。
CDATA 格式:
三、xml 解析技术介绍
四、dom4j 解析技术(重点*****)
由于 dom4j 它不是 sun 公司的技术,而属于第三方公司的技术,我们需要使用 dom4j 就需要到 dom4j 官网下载 dom4j
1、Dom4j 类库的使用
解压后:
2、dom4j 目录的介绍
src目录是dom4j的源码目录
3、dom4j 编程步骤:
4、获取 document 对象
准备需要解析的books.xml文件(此文件在src下):
<?xml version="1.0" encoding="utf-8" ?> <!--xml的声明,version:版本 encoding:编码--> <books> <book id="sn7384378"><!-- book用来描述一本书,id属性描述图书的编号 --> <name>java编程思想</name> <author>小张</author> <price>9.9</price> </book> <book id="sn3785738"> <name>西游记</name> <author>吴承恩</author> <price>99</price> </book> </books>
获取document对象:
public class dom4jTest { @Test public void getDocument() throws DocumentException { //1.创建一个SAXReader对象 SAXReader reader = new SAXReader(); //2.这个对象用于读取xml文件,返回Document Document document = reader.read("src/books.xml"); //3.打印,查看是否创建成功 System.out.println(document); } }
效果如下:
5、遍历 标签 获取所有标签中的内容(*****重点)
Book.java文件:
public class Book { private String id; private String name; private String author; private Double price; public Book() { } public Book(String id, String name, String author, Double price) { this.id = id; this.name = name; this.author = author; this.price = price; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public Double getPrice() { return price; } public void setPrice(Double price) { this.price = price; } @Override public String toString() { return "Book{" + "id=" + id + ", name='" + name + '\'' + ", author='" + author + '\'' + ", price=" + price + '}'; } }
dom4j解析测试类:
public class dom4jTest { @Test public void readXml() throws DocumentException { //1.创建一个SAXReader对象 SAXReader reader = new SAXReader(); Document document = reader.read("src/books.xml"); //2.通过document对象,拿到xml的根元素对象 Element rootElement = document.getRootElement(); //打印测试 // System.out.println(rootElement.asXML()); //3.通过根元素对象,获取所有的book标签对象构成的集合 List<Element> books = rootElement.elements("book"); //4.遍历books,获取每一个book对象 for (Element book : books){ //拿到book的属性值 String sn = book.attributeValue("sn"); //拿到book下面的name元素中的内容 Element name = book.element("name"); String nameText = name.getText(); //拿到book下面的author元素中的内容 Element author = book.element("author"); String authorText = author.getText(); //拿到book下面的price元素中的内容 Element price = book.element("price"); String priceText = price.getText(); //将获取到的数据封装成一个Book对象 Book b = new Book(sn, nameText, authorText, Double.parseDouble(priceText)); System.out.println(b); } } }
效果如下: