XML学习总结
一、XML简介
-
前言:
XML是(Extensible Markup Language)可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。 -
什么是XML?
XML是可扩展的标记语言,类似于HTML,其设计宗旨是传输数据,而非显示数据。XML标签没有被预定义,需要自行定义标签。XML被设计为具有自我描述性,是W3C的推荐标准。 -
xml的作用?
1、用来保存数据,而且这些数据具有自我描述性 2、它还可以做为项目或者模块的配置文件 3、还可以做为网络传输数据的格式(现在 JSON 为主)。
xml文件示例:
<?xml version="1.0" encoding="utf-8" ?>
<!--
xml声明
version是版本的意思
encoding是编码
standalone="yes/no" 表示这个 xml 文件是否是独立的 xml 文件
-->
<books> <!-- 这是xml注释 -->
<book id="SN123123413241"> <!-- book标签描述一本图书 id属性描述 的是图书 的编号 -->
<name>java编程思想</name> <!-- name标签描述 的是图书 的信息 -->
<author>华仔</author> <!-- author单词是作者的意思 ,描述图书作者 -->
<price>9.9</price> <!-- price单词是价格,描述的是图书 的价格 -->
</book>
<book id="SN12341235123"> <!-- book标签描述一本图书 id属性描述 的是图书 的编号 -->
<name>葵花宝典</name> <!-- name标签描述 的是图书 的信息 -->
<author>班长</author> <!-- author单词是作者的意思 ,描述图书作者 -->
<price>5.5</price> <!-- price单词是价格,描述的是图书 的价格 -->
</book>
</books>
二、XML语法
2.1 xml 注释
html 和 XML 注释 一样 : <!-- html 注释 -->
2.2 元素(标签)
-
什么是XML元素
元素是指从开始标签到结束标签的内容。 例如:<title>java 编程思想</title>
-
XML 命名规则
XML 元素必须遵循以下命名规则:
名称可以含字母、数字以及其他的字符 名称不能以数字或者标点符号开始 名称不能以字符 “xml”(或者 XML、Xml)开始 名称不能包含空格
-
xml 也 中的元素(标签)也 成 分成 单标签和双标签:
单标签 格式: <标签名 属性=”值” 属性=”值” ...... /> 双标签 格式:< 标签名 属性=”值” 属性=”值” ......>文本数据或子标签</标签名>
2.3 xml 属性
属性必须使用引号引起来,不引会报错示例代码
2.4 语法规则
-
所有 XML元素都须有关闭标签 (也就是闭合)
-
XML标签对大小写敏感
<Message>这是错误的。</message> <message>这是正确的。</message>
-
XML必须正确地嵌套
-
XML文档必须有根元素
根元素就是*元素,
没有父标签的元素,叫*元素。
根元素是没有父标签的*元素,而且是唯一一个才行。 -
XML的属性值须加引号
-
XML中的特殊字符
-
文本区域(CDATA区)
CDATA 语法可以告诉 xml 解析器,我 CDATA 里的文本内容,只是纯文本,不需要 xml 语法解析CDATA 格式: <![CDATA[ 这里可以把你输入的字符原样显示,不会解析 xml ]]>
三、xml解析技术介绍
-
xml解析就是把xml文档转换为xmlDOM 对象
-
早期 JDK 为我们提供了两种xml解析技术 DOM和 Sax简介( 已经过时,但我们需要知道这两种技术 )
-
dom 解析技术是 W3C 组织制定的,而所有的编程语言都对这个解析技术使用了自己语言的特点进行实现。Java 对 dom 技术解析标记也做了实现。
-
sun 公司在 JDK5 版本对 dom 解析技术进行升级:SAX( Simple API for XML )
SAX 解析,它跟 W3C 制定的解析不太一样。它是以类似事件机制通过回调告诉用户当前正在解析的内容。它是一行一行的读取 xml 文件进行解析的。不会创建大量的 dom 对象。所以它在解析 xml 的时候,在内存的使用上。和性能上。都优于 Dom 解析。
第三方的解析技术:
jdom 在 dom 基础上进行了封装 、
dom4j 又对 jdom 进行了封装。(重点)
pull 主要用在 Android 手机开发,是在跟 sax 非常类似都是事件机制解析 xml 文件。
四、dom4j解析技术 (重点)
由于 dom4j它不是 sun 公司的技术,而属于第三方公司的技术,我们需要使用 dom4j 就需要到 dom4j官网下载dom4j的jar包。
dom4j 编程步骤:
第一步:添加 dom4j 的 jar 包。并添加到类路径。
第二步:先加载 xml 文件创建 Document 对象
第三步:通过 Document 对象拿到根元素对象
第四步:通过根元素.elelemts(标签名); 可以返回一个集合,这个集合里放着。所有你指定的标签名的元素对象
第五步:找到你想要修改、删除的子元素,进行相应在的操作
代码示例:
@Test
public void test2() throws Exception{
//1.创建一个saxReader输入流,去读取xml配置文件,生成Document对象
SAXReader reader = new SAXReader();
Document document = reader.read("src/books.xml");
//2.通过Document对象获取跟元素
Element rootElement = document.getRootElement();
//3.通过跟元素获取book标签对象
//element() 和 elements()都是通过标签名查找子元素
List<Element> books = rootElement.elements();// Element.elements(标签名)它可以拿到当前元素下的指定的子元素的集合
//4.遍历,处理每个book标签转换为Book类
for(Element book : books){
//axXML() 把标签对象转换为标签字符串
Element nameElement = book.element("name");
//getText() 方法拿到起始标签和结束标签之间的文本内容
String nameText = nameElement.getText();
//直接获取指定标签名的文本内容
String priceText = book.elementText("price");
String authorText = book.elementText("author");
//获取标签对象的属性值
String snValue = book.attributeValue("sn");
System.out.println(new Book(snValue,nameText,Double.parseDouble(priceText),authorText));
}
}
需要解析的 books.xml 文件内容:
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book sn="SN12341232">
<name>辟邪剑谱</name>
<price>9.9</price>
<author>班主任</author>
</book>
<book sn="SN12341231">
<name>葵花宝典</name>
<price>99.99</price>
<author>班长</author>
</book>
</books>