第二十三章:XML可扩展标记语言

版权声明:作者:java_wxid https://blog.csdn.net/java_wxid/article/details/83573076

作者:java_wxid

XML 简介

什么是 XML?
XML 指可扩展标记语言(EXtensible Markup Language)。
XML 是一种很像HTML的标记语言。
XML 的设计宗旨是传输数据,而不是显示数据。
XML 标签没有被预定义。您需要自行定义标签。
XML 被设计为具有自我描述性。

XML 和 HTML 之间的差异
XML 被设计用来传输和存储数据,其焦点是数据的内容。 XML 不会做任何事情
HTML 被设计用来显示数据,其焦点是数据的外观。
HTML 旨在显示信息,而 XML 旨在传输信息。

xml的作用?
3个作用:
1、可以用来保存数据。
2、它可以用来做为工程或模块的配置文件。
3、它可以用来做为网络数据传输的格式。

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

1.文档声明。
创建一个xml文件在这里插入图片描述

<?xml version="1.0" encoding="UTF-8"?> xml声明。

<!-- xml声明 version是版本的意思 encoding是编码 -->
而且这个<?xml 要连在一起写,否则会有报错

属性
version 是版本号
encoding 是xml的文件编码
standalone=“yes/no” 表示这个xml文件是否是独立的xml文件

图书有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>

xml注释
html 和 XML 注释 一样 : <!-- html 注释 -->
元素(标签)
什么是xml元素?
在这里插入图片描述元素是指从开始标签到结束标签的内容。
例如:<title>java编程思想

元素 我们可以简单的理解为是 标签。
Element 翻译 元素

XML 命名规则
XML 元素必须遵循以下命名规则:
2.1)名称可以含字母、数字以及其他的字符
例如:

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

名称不能以数字或者标点符号开始
在这里插入图片描述名称不能包含空格
在这里插入图片描述xml中的元素(标签)也 分成 单标签和双标签:
单标签
格式: <标签名 属性=”值” 属性=”值” … />
双标签
格式:< 标签名 属性=”值” 属性=”值” …>文本数据或子标签</标签名>
在这里插入图片描述在这里插入图片描述在这里插入图片描述语法规则:
所有 XML 元素都须有关闭标签(也就是闭合)
在这里插入图片描述XML 标签对大小写敏感
在这里插入图片描述XML 必须正确地嵌套
在这里插入图片描述XML 文档必须有根元素
在这里插入图片描述XML 的属性值须加引号
在这里插入图片描述XML中的特殊字符
在这里插入图片描述文本区域(CDATA区)
CDATA 格式:
<![CDATA[ 这里可以把你输入的字符原样显示,不会解析xml ]]>
在这里插入图片描述xml解析技术介绍

xml可扩展的标记语言。
不管是html文件还是xml文件它们都是标记型文档,都可以使用w3c组织制定的dom技术来解析。
在这里插入图片描述document对象表示的是整个文档(可以是html文档,也可以是xml文档)

早期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 它是第三方的解析技术。我们需要使用第三方给我们提供好的类库才可以解析xml文件。

dom4j解析技术
由于dom4j 它不是sun公司的技术,而属于第三方公司的技术,我们需要使用dom4j 就需要到dom4j官网下载dom4j的jar包。
Dom4j 类库的使用
在这里插入图片描述把 dom4j-1.6.1.jar 类包,拷贝到工程 lib 目录下
在这里插入图片描述然后把jar包添加到当前的classpath路径中
在这里插入图片描述类库添加成功的示意图:
在这里插入图片描述dom4j 目录的介绍:
docs 是 文 档 目 录
在这里插入图片描述如何查Dom4j 的文档
在这里插入图片描述Dom4j 快速入门
在这里插入图片描述lib 目录
在这里插入图片描述src 目录是第三方类库的源码目录:
在这里插入图片描述
dom4j 编程步骤:
第一步: 先加载xml文件创建Document对象
第二步:通过Document对象拿到根元素对象
第三步:通过根元素.elelemts(标签名); 可以返回一个集合,这个集合里放着。所有你指定的标签名的元素对象
第四步:找到你想要修改、删除的子元素,进行相应在的操作
第五步,保存到硬盘上

获取document对象
需要解析的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 reader = 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对象
//			第二步,通过Document对象。拿到XML的根元素对象
//			第三步,通过根元素对象。获取所有的book 标签对象
//			第四小,遍历每个book标签对象。然后获取到book标签对象内的每一个元素,再通过getText() 方法拿到起始标签和结束标签之间的文本内容
		
//		第一步,通过创建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 (Element book : 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());
		}
    }

打印内容:
在这里插入图片描述
常见错误:
文件找不到异常

猜你喜欢

转载自blog.csdn.net/java_wxid/article/details/83573076