1 XML文件概述
XML是可扩展的标记语言,意思是它是由一些标签组成的,而这些标签是自己定义的。本质上一种数据格式,可以用来表示复杂的数据关系。
XML文件有如下的特点:
-
XML中的<标签名> 称为一个标签或者一个元素,一般是成对出现的。
-
XML中的标签名可以自己定义(可扩展),但是必须要正确的嵌套
-
XML中只能有一个根标签。
-
XML标签中可以有属性
-
XML必须第一行有一个文档声明,格式是固定的<?xml version="1.0" encoding="UTF-8"?>
-
XML文件必须是以.xml为后缀结尾
<!– 注释:以上抬头声明必须放在第一行,必须有 –>
<!– 根标签只能有一个 –>
<users>
<user id="1" desc="第一个用户">
<name>柳岩</name>
<sex>女</sex>
<地址> 湖南 </地址>
<password>123456</password>
<data> 3 < 2 && 5 > 4 </data>
<data1>
<![CDATA[
3 < 2 && 5 > 4
]]>
</data1>
</user>
<people>很多人</people>
<user id="2">
<name>宝强</name>
<sex>男</sex>
<地址>保定</地址>
<password>123456</password>
<data> 3 < 2 && 5 > 4 </data>
<data1>
<![CDATA[
3 < 2 && 5 > 4
]]>
</data1>
</user>
</users>
上面XML文件中的数据格式是最为常见的,标签有属性、文本、还有合理的嵌套。
XML文件中除了写以上的数据格式之外,还有一些特殊的字符不能直接写。
– 像 `<,>,& `等这些符号不能出现在标签的文本中,因为标签格式本身就有<>,会和标签格式冲突。
如果标签文本中有这些特殊字符,需要用一些占位符代替。
```txt
< 表示 <
> 表示 >
& 表示 &
' 表示 '
" 表示 "
```
```xml
<data> 3 < 2 && 5 > 4 </data>
```
– 如果在标签文本中,出现大量的特殊字符,不想使用特殊字符,此时可以用CDATA区,格式如下
```xml
<data1>
<![CDATA[
3 < 2 && 5 > 4
]]>
</data1>
```
2 XML解析1

public class Dom4JTest {
public static void main(String[] args) throws Exception {
// 1. 创建一个Dom4J框架提供的解析器对象
SAXReader saxReader = new SAXReader();
// 2. 使用saxReader对象把需要解析的XML文件读成一个Document对象。
Document document =
saxReader.read("day13_properties_xml\\\\src\\\\helloworld.xml");
// 3. 从文档对象中解析XML文件的全部数据了
Element root = document.getRootElement();
System.out.println(root.getName());
}
}
3 XML解析2

public static void main(String[] args) throws Exception {
// 1. 创建一个Dom4J框架提供的解析器对象
SAXReader saxReader = new SAXReader();
// 2. 使用saxReader对象把需要解析的XML文件读成一个Document对象。
Document document =
saxReader.read("day13_properties_xml\\\\src\\\\helloworld.xml");
// 3. 从文档对象中解析XML文件的全部数据了
Element root = document.getRootElement();
System.out.println(root.getName());
// 4. 获取根元素下的全部一级子元素。
// List<Element> elements = root.elements();
List<Element> elements = root.elements("user");
for (Element element : elements) {
System.out.println(element.getName());
}
// 5. 获取当前元素下的某个子元素。
Element people = root.element("people");
System.out.println(people.getText());
// 如果下面有很多子元素user,默认获取第一个。
Element user = root.element("user");
System.out.println(user.elementText("name"));
// 6. 获取元素的属性信息
System.out.println(user.attributeValue("id")); // 1
Attribute id = user.attribute("id");
System.out.println(id.getName()); // id
System.out.println(id.getValue()); // 1
System.out.println("——————————");
// 获取所有的属性
List<Attribute> attributes = user.attributes();
for (Attribute attribute : attributes) {
System.out.println(attribute.getName() + "=" + attribute.getValue());
}
// 7. 如何获取全部的文本内容:获取当前元素下的子元素文本值
System.out.println(user.elementText("name"));
System.out.println(user.elementText("地址"));
System.out.println(user.elementTextTrim("地址")); // 取出文本去除前后空格
System.out.println(user.elementText("password"));
Element data = user.element("data");
System.out.println(data.getText());
System.out.println(data.getTextTrim()); // 取出文本去除前后空格
}
}

