XML学习
XML简介
- 什么是xml:xml是可扩展的标记性语言(指标签都不是HTML中定义好的,可以使用自定义的标签)
- XML的作用有:
- 用来保存数据,而且这些数据具有自我描述性
- 还可以作为项目或者模块的配置文件
- 还可以所谓网络传输数据的格式(现在以JSON为主)
XML语法
- 文档声明
- 元素(标签)
- xml属性
- xml注释
- 文本区域(CDATA区)
- 文档声明
<?xml version = "1.0" encoding = "utf-8 ?>"
是xml文件的声明
属性version是版本号 , encoding是xml文件的字符集 , standalone = “yes/no”表示xml文件是否独立
<?xml version="1.0" encoding="utf-8" ?>
<!--
<?xml version="1.0" encoding="utf-8" ?>
以上内容是xml文件的声明
version = "1.0" 表示xml文件的版本
encoding = "utf-8" 表示xml文件所使用的字符集
standalone="yes/no" 表示这个 xml 文件是否是独立的 xml 文件
-->
<!-- 如希望在xml文件中保存图书 -->
<books> <!-- books表示多个图书信息,book表示单个图书信息 -->
<!-- 图书的出版号或者序列号使用sn来表示 -->
<book sn="book123456">
<name>时间简史</name>
<author>霍金</author>
<price>75</price>
</book>
<book sn="book123456">
<name>果壳里的宇宙</name>
<author>霍金</author>
<price>88</price>
</book>
</books>
-
xml注释
xml文件的注释与html文件的注释相同:<!-- 注释内容 -->
-
html标签复习
格式:<标签名>封装的数据</标签名>
单标签:<标签名/> <br/> 换行 <hr/>水平线
双标签:<标签名>封装的数据</标签名>
标签名对大小写不敏感
标签要有属性,要有基本属性和事件属性
标签要闭合
-
xml元素
- 什么是xml元素:指从开始标签到结束标签的内容,即可以理解为标签
- xml元素的命名规则:
- 名称可以包含字母、数字以及其他的字符
- 名称不能以数字或者是标点符号开始
- 名称不能包含空格
3.xml元素也可以分为单标签和双标签
-
xml属性
xml的标签属性和html的标签属性是非常那个类似的,属性可以提供元素的额外信息。 -
语法规则
- 所有的xml远古三都必须有关闭标签,也就是说xml标签需要闭合
- xml标签对大小写敏感
- xml标签必须正确的嵌套
- xml文档必须有根元素
根元素就是顶级元素,没有父标签的元素叫做顶级元素,而且是xml文档中的唯一一个 - xml的属性值必须加引号,单引号或者双引号皆可
- xml中的特殊字符
>
和<
- 文本区域
CDATA语法可以告诉xml解析器,CDATA中的文本内容是纯文本,不需要xml语法解析
CDATA格式:
<![CDATA[这里输入的字符将会被原样显示,不会被解析器解析]]
<book sn="book632566">
<!-- CDATA中的内容不会被解析器解析 -->
<name><![CDATA[
这本书的名字叫《阿萨德客户高考0》<><<><><><><>
]]>]</name>
</book>
xml解析技术介绍
xml是可扩展的标记性语言。无论是html文件还是xml文件,都是标记型文档,都可以使用w3c组织指定的dom技术来进行解析。
早期 JDK 为我们提供了两种 xml 解析技术 DOM 和 Sax 简介(已经过时,但我们需要知道这两种技术)
第三方的解析:
- jdom 在 dom 基础上进行了封装。
- dom4j 又对 jdom 进行了封装。 Dom4j 需要使用第三方提供好的类库才可以解析 xml 文件。
- pull 主要用在 Android 手机开发,是在跟 sax 非常类似都是事件机制解析 xml 文件
dom4j解析技术
由于dom4j是第三方提供的解析技术,因此需要外部导入dom4j包
-
dom4j编程步骤
- 首先加载目标xml文件,获得Document对象
- 使用获得的Document对象获取xml文件的根元素对象
- 通过根元素对象.elements(标签名)方法返回该标签对象的集合
- 使用标签对象.element( 标签名)获得想要操作的子元素对象,对其进行相应的操作
- 保存至硬盘
-
使用dom4j包解析xml文件,获得xml文件的根元素对象
package com.javis;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.junit.Test;
import java.util.List;
/**
* 使用dom4j来对xml文件进行解析,将其解析为java类
* */
public class Dom4jTest {
/**
* 使用SAXReader输入流的read方法来对xml文件进行读取
* 获得document对象
* 该对象对应着xml文件解析器解析出来的dom对象
* */
@Test
public void test1() throws Exception{
//创建一个SaxReader输入流读取xml文件,以生成document对象
SAXReader saxReader = new SAXReader();
//使用SAXReader的read方法来读取xml文件生成document对象
Document document = saxReader.read("XML/xml/books.xml");
}
}
- 使用根元素对象获得指定的元素对象集合,进而对其内部的标签进行各种操作
package com.javis;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.junit.Test;
import java.util.List;
/**
* 使用dom4j来对xml文件进行解析,将其解析为java类
* */
public class Dom4jTest {
/**
* 通过读取books.xml文件生成Book类
* */
@Test
public void test2() throws Exception{
//1. 读取book.xml文件
SAXReader saxReader = new SAXReader();
Document document = saxReader.read("XML/xml/books.xml");
//2. 通过document对象获得xml文件的根元素
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) {
//测试
//System.out.println(book.asXML());
//获取book元素标签的name子标签
Element name = book.element("name");
//获取book元素标签的price子标签
Element price = book.element("price");
//获取book元素标签的author子标签
Element author = book.element("author");
//再通过getText方法获取标签之间的内容
System.out.println("书名" + name.getText() +
" , 价格:" +price.getText() +
", 作者:" + author.getText());
}
}