JavaWeb_XML篇

Posted 葡萄籽-June

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaWeb_XML篇相关的知识,希望对你有一定的参考价值。

XML篇

本文主要是介绍XML的基础内容,并通过XML举例深入理解。


文章目录


一、XML简介

Extensible Markup Language 可扩展的标记性语言

1.1 xml 的作用

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

1.2 xml 语法

1.2.1. 文档声明

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

xml 声明
且这个 <?xml 要连在一起写,否则会有报错

属性含义
version版本号
encodingxml 的文件编码
standalone=“yes/no”xml 文件是否是独立的xml 文件

例如,创建一个简单XML 文件,用来描述图书信息。

<?xml version="1.0" encoding="UTF-8"?>
<!-- xml 声明version 是版本的意思encoding 是编码-->
<books> <!-- 这是xml 注释-->
	<book id="SN1212121212"> <!-- book 标签描述一本图书id 属性描述的是图书的编号-->
	<name>java 编程</name> <!-- name 标签描述的是图书的信息-->
	<author>佚名</author> <!-- author 单词是作者的意思,描述图书作者-->
	<price>39.9</price> <!-- price 单词是价格,描述的是图书的价格-->
	</book>
	<book id="SN2323232323"> <!-- book 标签描述一本图书id 属性描述的是图书的编号-->
	<name>哈利波特</name> <!-- name 标签描述的是图书的信息-->
	<author>罗琳</author> <!-- author 单词是作者的意思,描述图书作者-->
	<price>79.9</price> <!-- price 单词是价格,描述的是图书的价格-->
	</book>
</books>

【注】xml文件可直接在浏览器查看

1.2.2. 元素(标签)

xml元素指的是从(且包括)开始标签直到结束标签的部分。 元素可包含其他元素、文本或者两者的混合物;(也可以拥有属性)

就如上述图书信息的xml例子中:
book标签是一对的,并且可以包含name、author、price等属性。

<book id="SN1212121212"> <!-- book 标签描述一本图书id 属性描述的是图书的编号-->
	<name>java 编程</name> <!-- name 标签描述的是图书的信息-->
	<author>佚名</author> <!-- author 单词是作者的意思,描述图书作者-->
	<price>39.9</price> <!-- price 单词是价格,描述的是图书的价格-->
</book>

XML的命名规则:

【1】名称可以含字母、数字以及其他的字符
【2】名称不能以数字或者标点符号开始
【3】名称不能包含空格

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

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

1.2.3. xml 属性

xml 的标签属性和html 的标签属性是非常类似的,属性可以提供元素的额外信息 在标签上可以书写属性:
-【1】一个标签上可以书写多个属性。
-【2】每个属性的值必须使用引号引起来,不引会报错示例代码;
-【3】其规则和标签的书写规则一致。

1.2.4. xml 注释

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

1.2.5. 语法规则

【1】所有XML 元素都须有关闭标签(也就是闭合)
【2】XML 标签对大小写敏感
【3】XML 必须正确地嵌套
【4】XML 文档必须有根元素
【5】XML 的属性值须加引号
【6】XML 中有特殊字符:& lt; & gt; 等
【7】文本区域(CDATA 区)

---CDATA 语法可以告诉xml 解析器,我CDATA 里的文本内容,只是纯文本,不需要xml 语法解析
---CDATA 格式:

<![CDATA[ 这里可以把你输入的字符原样显示,不会解析xml ]]>

二、xml 解析技术介绍

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

【1】XML文档对象模型定义访问和操作XML文档的标准方法。
【2】DOM将XML文档作为一个树形结构,而树叶被定义为节点。
【3】document 对象表示的是整个文档(可以是html 文档,也可以是xml 文档)

第三方解析:
(1)dom4j 又对jdom 进行了封装
(2)jdom 在dom 基础上进行了封装
(3)pull 主要用在android 手机开发,是在跟sax 非常类似都是事件机制解析xml 文件。

三、dom4j 解析技术

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

3.1 dom4j 编程步骤

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

3.2 获取document 对象

创建一个lib 目录,并添加dom4j 的jar 包。并添加到类路径。
例如解析上述例子books.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);

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

【1】通过创建SAXReader 对象。来读取xml 文件,获取Document 对象
【2】通过Document 对象。拿到XML 的根元素对象
【3】通过根元素对象。获取所有的book 标签对象
【4】遍历每个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 (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());
		
	

结果:

书名:java 编程, 价格:39.9,作者:佚名
书名:哈利波特,价格:79.9,作者:罗琳

以上是关于JavaWeb_XML篇的主要内容,如果未能解决你的问题,请参考以下文章

JavaWeb_XML篇

Python篇(一) 引号的作用及其区别

C++混合编程之idlcpp教程Python篇

攻防世界(解密篇Crypto)---混合编码

C++混合编程之idlcpp教程Lua篇

C++混合编程之idlcpp教程Python篇