有些内容不想让解析引擎执行,而是当作原始内容处理(即当做普通文本),可以使用 CDATA 包括起来,CDATA 节中的所有字符都会被当作简单文本,而不是 XML 标记。
语法:
<![CDATA[
这里可以把你输入的字符原样显示,不会解析 xml
]]>
可以输入任意字符(除]]>外)
不能嵌套
java复制代码
<?xml version="1.0" encoding="utf-8"?>
<!--
<![CDATA[
这里可以把你输入的字符原样显示,不会解析 xml
]]>
-->
<students>
<stduent id="01">
<name>tom</name>
<gender>男</gender>
<age>18</age>
<!-- 举例说明:
下面是一段 js 的代码片段. 直接放在<code></code>标签间,语法错误
使用 CDATA 节来处理即可. <script data-compress=strip>
function h(obj){
obj.style.behavior='url(#default#homepage)';
var a = obj.setHomePage('//www.baidu.com/');
}
</script>
-->
</stduent>
<stduent id="02">
<name>scott</name>
<gender>女</gender>
<age>17</age>
<code>
<!--如果希望把某些字符串,当做普通文本,使用 CDATA 包括 -->
<![CDATA[
<script data-compress=strip>
function h(obj){
obj.style.behavior='url(#default#homepage)';
var a = obj.setHomePage('//www.baidu.com/');
}
</script>
]]>
</code>
</stduent>
</students>
格式正规的 XML 文档-小结
遵循如下规则的 XML 文档称为格式正规的 XML 文档:
1、XML 声明语句 <?xml version="1.0" encoding="utf-8"?>
2、必须有且仅有一个根元素
3、标记大小,区分大小写的. 4、属性值用引号
5、标记成对
6、空标记关闭
7、元素正确嵌套
🌍三.XML 解析技术原理之DOM4j
❄️ 1.XML 解析技术原理
不管是 html 文件还是 xml 文件它们都是标记型文档,都可以使用 w3c 组织制定的dom 技术来解析
document 对象表示的是整个文档(可以是 html 文档,也可以是 xml 文档)
❄️ 2.三种XML 解析技术介绍
早期 JDK 为我们提供了两种 xml 解析技术
DOM 和 Sax 简介
1.dom 解析技术是 W3C 组织制定的,而所有的编程语言都对这个解析技术使用了自己语言的特点进行实现。 Java 对 dom 技术解析也做了实现
2.sun 公司在 JDK5 版本对 dom 解析技术进行升级:SAX( Simple API for XML ) SAX解析,它是以类似事件机制通过回调告诉用户当前正在解析的内容。 是一行一行的读取 xml 文件进行解析的。不会创建大量的 dom 对象。 所以它在解析 xml 的时候,在性能上优于 Dom 解析
这两种技术已经过时,知道有这两种技术即可
第三方的 XML 解析技术
1.jdom 在 dom 基础上进行了封装
2.dom4j 又对 jdom 进行了封装。
3.pull 主要用在 Android 手机开发,是在跟 sax 非常类似都是事件机制解析 xml 文件
❄️ 3.DOM4J 介绍
Dom4j 是一个简单、灵活的开放源代码的库(用于解析/处理 XML 文件)。Dom4j 是由早期开发 JDOM 的人分离出来而后独立开发的。
与 JDOM 不同的是,dom4j 使用接口和抽象基类,虽然 Dom4j 的 API 相对要复杂一些,但它提供了比JDOM 更好的灵活性。
Dom4j 是一个非常优秀的 Java XML API,具有性能优异、功能强大和极易使用的特点。现在很多软件采用的 Dom4j。
使用 Dom4j 开发,需下载 dom4j 相应的 jar 文件
❄️ 4.DOM4j 中,获得 Document 对象的方式有三种
开发 dom4j 要导入 dom4j 的包
1、读取 XML 文件,获得 document 对象 SAXReader reader = new SAXReader(); //创建一个解析器 Document document = reader.read(new File("src/input.xml"));//XML Document
2、解析 XML 形式的文本,得到 document 对象. String text = "<members></members>"; Document document = DocumentHelper.parseText(text);
3、主动创建 document 对象. Document document = DocumentHelper.createDocument(); //创建根节点 Element root = document.addElement("members");
代码演示:
1.演示如何加载 xml 文件
java复制代码
public class Dom4j_ {
@Test
public void loadXML() throws DocumentException {
//得到一个解析器
SAXReader reader = new SAXReader();
//得到 document
Document document = reader.read(new File("src/students.xml"));
System.out.println(document);
}
}
2.遍历所有的 student 信息
java复制代码
@Test
public void listStus() throws DocumentException {
//得到一个解析器
SAXReader reader = new SAXReader();
//代码技巧->debug 看看 document 对象的属性
//分析了 document 对象的底层结构
Document document = reader.read(new File("src/students.xml"));
//1. 得到 rootElement, 你是 OOP
Element rootElement = document.getRootElement();
//2. 得到 rootElement 的 student Elements
List<Element> students = rootElement.elements("student");
//System.out.println(student.size());//2
for (Element student : students) {//element 就是 Student 元素/节点
//获取 Student 元素 的 name Element
Element name = student.element("name");
Element age = student.element("age");
Element resume = student.element("resume");
Element gender = student.element("gender");
System.out.println("学生信息= " + name.getText() + " " + age.getText() +
" " + resume.getText() + " " + gender.getText());
}
}