XML

尚硅谷官网:https://space.bilibili.com/302417610/

XML

1.XML简介

xml (Extensible Markup Language) 是可扩展的标记性语言。
Extensible /ek's ten sɪbl/ 可扩展

2.xml的作用

xml的主要作用有:
1、用来保存数据,而且这些数据具有自我描述性
2、它还可以做为项目或者模块的配置文件
3、还可以做为网络传输数据的格式(现在JSON为主)。

3.xml语法

1. 文档声明。
2. 元素(标签)
3. xml属性
4. xml注释
5. 文本区域(CDATA区)

3.1 文档声明

1)创建一个xml文件

<?xml version="1.0" encoding="UTF-8"?> --> xml声明。
<!--xml声明
version是版本的意思
encoding是编码-->
而且这个<?xml要连在一起写,否则会有报错
属性
version 是版本号
encoding 是xml的文件编码
standalone="yes/no" 表示这个xml文件是否是独立的xml文件

2)图书有id属性表示唯一标识,书名,有作者,价格的信息

<?xml version="1.0" encoding="UTF-8"?>
<!--xml声明version是版本的意思 encoding是编码-->
<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>

3.2、xml注释

html 和 XML注释一样: <!-- html 注释-->

3.3、元素(标签)

html标签:
格式:<标签名>封装的数据</标签名>
单标签:<标签名/>
<br/>换行
<hr/>水平线
双标签:<标签名>封装的数据</标签名>
标签名大小写不敏感
标签有属性,有基本属性和事件属性
标签要闭合(不闭合,html中不报错。但我们要养成良好的书写习惯。闭合)

1)什么是xml元素

元素是指从开始标签到结束标签的内容。
例如:<title>java编程思想</title>
元素我们可以简单的理解为是标签。
Element 翻译元素

2)XML命名规则

​ 2.1)名称可以含字母、数字以及其他的字符

例如:
<book id="SN213412341"> <!--描述一本书-->
<author>班导</author> <!--描述书的作者信息-->
<name>java编程思想</name> <!--书名-->
<price>9.9</price> <!--价格-->
</book>

​ 2.2)名称不能以数字或者标点符号开头

​ 2.3)名称不能包含空格

​ 3)xml中的元素(标签)也分成单标签和双标签:

单标签
格式:<标签名 属性 = ”值” 属性 = ”值”...... />
双标签
格式:<标签名 属性 = ”值” 属性 = ”值”......>文本数据或子标签</标签名>

3.4、xml属性

每个属性的值必须使用引号引起来

xml的标签属性和html 的标签属性是非常类似的,属性可以提供元素的额外信息
在标签上可以书写属性:
一个标签上可以书写多个属性。每个属性的值必须使用引号引起来。
规则和标签的书写规则一致。

1)属性必须使用引号引起来,不引会报错示例代码

3.5、语法规则:

1.所有XML元素都须有关闭标签(也就是闭合)

2.XML标签对大小写敏感

3.XML必须正确地嵌套

4.XML文档必须有根元素

根元素就是顶级元素,
没有父标签的元素,叫顶级元素。
根元素是没有父标签的顶级元素,而且是唯一一个才行。

5.XML的属性值须加引号

6.XML中的特殊字符

7.文本区域(CDATA区)

CDATA语法可以告诉xml解析器,我CDATA里的文本内容,只是纯文本,不需要xml语法解析
CDATA格式:
<![CDATA[ ]]>
<![CDATA[ 这里可以把你输入的字符原样显示,不会解析xml]]>

4.xml解析技术介绍

xml可扩展的标记语言。
不管是html文件还是xml文件它们都是标记型文档,都可以使用w3c组织制定的dom技术来解析。

document对象表示的是整个文档(可以是html文档,也可以是xml文档)

早期JDK为我们提供了两种xml解析技术DOM和Sax简介(已经过时,但我们需要知道这两种技术)
dom解析技术是W3C组织制定的,而所有的编程语言都对这个解析技术使用了自己语言的特点进行实现。
Java对dom技术解析标记也做了实现。
sun公司在JDK5版本对dom解析技术进行升级:SAX(SimpleAPIforXML)
SAX解析,它跟W3C制定的解析不太一样。它是以类似事件机制通过回调告诉用户当前正在解析的内容。
它是一行一行的读取xml文件进行解析的。不会创建大量的dom对象。
所以它在解析xml的时候,在内存的使用上。和性能上。都优于Dom解析。
第三方的解析:
jdom在dom基础上进行了封装、
dom4j 又对jdom进行了封装。
pull 主要用在Android手机开发,是在跟sax非常类似都是事件机制解析xml文件。
这个Dom4j 它是第三方的解析技术。我们需要使用第三方给我们提供好的类库才可以解析xml文件。

5. dom4j解析技术(重点)

由于dom4j 它不是sun公司的技术,而属于第三方公司的技术,我们需要使用dom4j 就需要到dom4j官网下载dom4j
jar包。

1)Dom4j 类库的使用:

解压

2)dom4j 目录的介绍:

docs 是文档目录

3)如何查Dom4j 的文档

4)Dom4j 快速入门

5)lib目录

6)src目录是第三方类库的源码目录:

7)dom4j 编程步骤:

第一步:先加载xml文件创建Document对象
第二步:通过Document对象拿到根元素对象
第三步:通过根元素.elelemts(标签名); 可以返回一个集合,这个集合里放着。所有你指定的标签名的元素对象
第四步:找到你想要修改、删除的子元素,进行相应在的操作
第五步,保存到硬盘上

获取document对象

创建一个lib目录,并添加dom4j的jar包。并添加到类路径。

需要解析的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>

解析获取Document对象的代码
第一步,先创建SaxReader对象。这个对象,用于读取xml文件,并创建Document

/*
*dom4j获取Documet对象
*/
@Test
public void getDocument() throws DocumentException{
//要创建一个Document对象,需要我们先创建一个SAXReader对象
SAXReader reade r= new SAXReader();
//这个对象用于读取xml文件,然后返回一个Document。
Document document = reader.read("src/books.xml");
//打印到控制台,看看是否创建成功
System.out.println(document);
}

遍历标签获取所有标签中的内容

需要分四步操作:
第一步,通过创建SAXReader对象。来读取xml文件,获取Document对象
第二步,通过Document对象。拿到XML的根元素对象
第三步,通过根元素对象。获取所有的book标签对象
第四小,遍历每个book标签对象。然后获取到book标签对象内的每一个元素,再通过getText() 方法拿到起始标签和结
束标签之间的文本内容
/*
*读取xml文件中的内容
*/
@Test
public void readXML() throws DocumentException{
// 第一步,通过创建SAXReader对象。来读取xml文件,获取Document对象
SAXReader reader = new SAXReader();
Document document = reader.read("src/books.xml");
//第二步,通过Document对象。拿到XML的根元素对象
Element root = document.getRootElement();
//打印测试
//Element.asXML()它将当前元素转换成为String对象
//System.out.println(root.asXML());
// 第三步,通过根元素对象。获取所有的book标签对象
//Element.elements(标签名)它可以拿到当前元素下的指定的子元素的集合
List<Element> books = root.elements("book");
// 第四步,遍历每个book标签对象。然后获取到book标签对象内的每一个元素,
for(Elementbook:books){
//测试
//System.out.println(book.asXML());
//拿到book下面的name元素对象
Element nameElement = book.element("name");
//拿到book下面的price元素对象
Element priceElement = book.element("price");
//拿到book下面的author元素对象
Element authorElement = book.element("author");
//再通过getText()方法拿到起始标签和结束标签之间的文本内容
System.out.println("书名"+nameElement.getText()+",价格:"
+priceElement.getText()+",作者:"+authorElement.getText());
}
}

打印内容:

posted @   Lz_蚂蚱  阅读(82)  评论(0编辑  收藏  举报
(评论功能已被禁用)
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起