1. xml
1.1 作用
- 保存数据
- 配置文件
- 数据传输的载体
1.2 定义
<!--version表示声明用什么版本解释器去执行,encoding用什么编码,standalone是no代表有依赖别文档-->
<?xml version="1.0" encoding="utf-8" standalone="no" ?>
<stu id="10086">
<name>liyang</name>
<age>18</age>
</stu>
1.3 编码问题
我们本地电脑上的文件编码是GBK。这就去代表着我们写完文件后,文件是以GBK编码的形式存储在电脑上的,如果这里我们指定我们的XML文件的编码是UTF8就肯定会出现乱码问题了。要想不出现乱码问题,就需要把我们的XML文件的编码改成和我们本地电脑上的编码一致。为了通用建议使用UTF-8
1.4 元素定义
- 文档声明下的第一个元素叫做根元素(根标签)
- 标签一般成对出现。但是也有例外,即空标签,一般配合属性一起使用
1.5 注释
<!-- -->
1.6 非法字符
< 和 & 是非法字符
< <!-- 这是<的意思 -->
& <!-- 这是&的意思 -->
1.7 CDATA区
不想让xml去解析的内容可以用CDATA去括住
<![CDATA[ 这里面的东西是不解析的哦!! ]]>
<![CDATA[]]>
1.8 解析
DOM:Document Object Model。把整个xml加载到内存中形成树状结构。整个文档称之为document对象,属性对应Attribute对象,所有的元素节点对应Element对象,文本对应Text对象,以上所有的对象都可以称之为Node节点。可以对文档进行增删改查操作,但是文档特别大将会造成内存溢出。
SAX:Simple API for Xml 基于事件驱动,读取一行,解析一行。不会造成内存溢出,但是也不能进行增删,只能进行查阅。
// 导包:dom4j-1.6.1.jar
import java.util.List;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class HelloWorld {
public static void main(String[] args) throws Exception {
// 1. 创建sax读取对象
SAXReader reader = new SAXReader();
// 2. 读取
Document document = reader.read("src/Test.xml");
// 3. 获取根元素
Element rootElement = document.getRootElement();
// 4. 获取根元素下面的元素
List<Element> elements = rootElement.elements();
// 5. 遍历下面的元素,然后拿出中的元素值
for (Element element : elements) {
// 6. 获取name 和 age
String name = element.element("name").getText();
String age = element.element("age").getText();
System.out.println(name + age);
}
}
}
// 先要导包:jaxen-1.1.1.jar
import java.util.List;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class HelloWorld {
public static void main(String[] args) throws Exception {
// 1. 创建sax读取对象
SAXReader reader = new SAXReader();
// 2. 读取
Document document = reader.read("src/Test.xml");
// 3. 获取根元素
Element rootElement = document.getRootElement();
// 4. 使用Xpath去获取元素
/*
* 一级一级寻找路径:/stus/stu/name
* 寻找全部的name路径://name
* 标签是name且属性是id=1的://name[@id='1']
*/
List<Element> names = rootElement.selectNodes("//name");
// 5. 遍历
for (Element element : names) {
System.out.println(element.getText());
}
}
}
1.9 约束
1.9.1 DTD方式
<?xml version="1.0" encoding="UTF-8"?>
<!--
网络
<!DOCTYPE stus PUBLIC "//UNKNOWN/" "unknown.dtd">
本地
<!DOCTYPE stus SYSTEM "stus.dtd">
内嵌
<!DOCTYPE stus [
<!ELEMENT stus (stu)>
<!ELEMENT stu (name,age)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
]>
-->
<!DOCTYPE stus [
<!ELEMENT stus (stu)>
<!ELEMENT stu (name,age)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
]>
<stus>
<stu>
<name>李阳</name>
<age>18</age>
</stu>
</stus>
1.9.2 Schema方式
来源:CSDN
作者:你看我会发光i
链接:https://blog.csdn.net/liyang_007/article/details/103651792