Java基础回顾之XML

XML
第一章 XML概念及基本语法
1-1 什么是XML?都有哪些版本?
XML为可扩展标记语言,全称为Extensible Markup Language。
XML语法上和HTML比较相似,但HTML中的元素是固定的,而XML的标签是可以由用户自定义的。



W3C在1998年2月发布1.0版本,2004年2月又发布1.1版本,但因为1.1版本不能向下兼容1.0版本,所以1.1没有人用。
我们现在实际项目开发中所使用的都是1.0版本,1.1版本不予考虑。

1-2 XML用处
(1)数据传输(数据传输媒介)
场景1
A公司 java语言
Person p = new Person(“A0001”,”zs”,23);

{“id”:”A0001”,”name”:”zs”,”age”:23}
{id:”A0001”,name:”zs”,age:23}

将p转换成xml文档
person.xml


A0001
zs
23



B公司 其他面向对象语言 C# C++…
想要A公司的p对象中的数据,由于语言不通,不能用p
接收person.xml
B公司解析person.xml中的数据
A0001 zs 23
拿到以上数据之后,再将以上数据打包到自己语言的对象中就可以了.

场景2:
后端(java)连接数据库,取得数据
将数据传输到前端(html)
前端接收数据!!!
使用什么语言来接收数据???
示例:从数据库表中取得 A0001 zs 23
在后台封装到p对象中
Person p = new Person(“A0001”,”zs”,23);
后台将p对象传输到前端js
js来接收p对象
将p转换成xml文档
js解析xml文档
var p = 解析xml得来的数据.

在未来的实际项目开发中,作为数据传输的媒介,xml语法冗长,外部解析插件支持性差,所以我们不用这种形式.
我们未来应用的最多的数据传输媒介的方式是json

(2)配置文件
xml作为配置文件来使用,在每一项技术中,xml的配置文件的作用都不相同.
比如在学习servlet/jsp的时候,我们要使用到的是叫做web.xml的配置文件.这个配置文件的作用是web开发的主配置文件.所有的servlet类必须经过在web.xml中进行注册之后,才能够使用.
在我们以后的框架的学习中,每一款框架都会要求有xml配置文件的应用,不同的框架对于xml配置的作用都是不同的.

1-3 XML语法
(1)创建普通文本文件,后缀名为xml
(2)声明
语法:

解析:
a、文档声明必须以结尾
b、文档声明必须在文档中的0行0列
c、文档声明的3个属性
versioin属性:指定XML文档版本.必须属性,因为我们 不会选择1.1,只会选择1.0;
encoding属性:指定当前文档的编码。可选属性,默认 值是utf-8;
standalone属性:指定文档独立性。可选属性,默认值 为yes,表示当前文档是独立文档。如果为no表示当前文档不 是独立的文档,会依赖外部文件。

(3)元素
语法:

解析
a、元素是XML文档中最重要的组成部分,
b、普通元素的结构开始标签、元素体、结束标签组成。例如: 你好
c、元素体:元素体可以是元素,也可以是文本,例如:
你好
d、空元素:空元素只有开始标签,而没有结束标签,但元素必 须自己闭合.例如:



	 e、元素命名:
		区分大小写
		不能使用空格,不能使用冒号:
		不建议以XML、xml、Xml开头
		良好的XML文档,必须有一个根元素。

(4)属性
语法:

解析:
a、属性是元素的一部分,它必须出现在元素的开始标签中
b、属性的定义格式:属性名=属性值,其中属性值必须使用 单引或双引
c、一个元素可以有0~N个属性,但一个元素中不能出现同名 属性
d、属性名不能使用空格、冒号等特殊字符,且必须以字母开 头
(5)注释
语法:

解析:
与html一样,以“ ”结束。xml解析器会 自动忽略掉注释掉的xml代码。
(6)转义字符

5<3

语法: < 对应<小于号 >对应>大于号 & 对应&和 ' 对应' 单引号 " 对应" 双引号 解析: a、因为很多符号已经被XML文档结构所使用,所以在元素 体或属性值中想使用这些符号就必须使用转义字符 b、xml中的转义字符与html中的使用方式一样

(7)CDATA区

如果我们表述的文本中出现了大量的需要转义的字符,如果一个一个进行转换,那么会非常麻烦,我们可以使用CDATA来完成,写在CDATA中的内容是不需要进行转义操作的.



	语法:
	<><><><><>>>>>><><><><><><&&&&&&’’’””””””””””””’>>
	]]>

第二章 XML约束
2-1 DTD约束
DTD(Document Type Definition),文档类型定义,用来约束xml文档。规定xml文档中元素的名称,子元素的名称及顺序,元素的属性等。
2-2 Schema约束
同DTD约束一样,也是用来约束xml文档用的技术。
从功能上讲,Schema约束要比DTD强大很多,是DTD 替代者
Schema本身也是xml文档,但Schema文档的扩展名为xsd,而不是xml。

创建包结构

2-3通过使用约束对web.xml进行搭建
见代码
2-4 面试题:XML与DTD、Schema的关系是什么
回答:dtd与schema也是xml,是传统xml文件的约束扩展

第三章 XML文档解析
3-1什么是XML文档解析
将xml文档中的元素、属性、文本内容进行拆解,我们获得 这些组件的过程就叫做xml的解析工作。
3-2 XML文档解析方式

(1)sax解析:逐行解析,只能查询。 (2)dom解析:一次性将文档加载到内存中,增删改查的操作 都可以。

3-3 常见的XML解析开发包
JAXP:sun公司提供支持DOM和SAX开发包
JDom:dom4j前身
dom4j:实际开发中最常用的解析开发包

3-4 使用dom4j技术解析XML案例
(1)导入jar包
dom4j-1.6.1.jar
(2)操作流程
dom4j 必须使用核心类SaxReader加载xml文档获得 Document,通过Document 对象获得文档的根元素,然后就可 以继续操作了。
(3)常用API
a、SaxReader对象
read(…) 加载执行xml文档
Document对象
getRootElement() 获得根元素
b、Element对象
elements(…) 获得指定名称的所有子元素。可以不指定 名称
element(…) 获得指定名称第一个子元素。可以不指定 名称
getName() 获得当前元素的元素名
getText() 获得当前元素的文本内容
(4)具体代码实现方式:
a.导入jar包
b.创建一个核心对象 SAXReader
new SAXReader();
c.将xml文档加载到内存中形成一棵树
Document doc=reader.read(文件)
d.获取根节点
Element root=doc.getRootElement();
e.通过根节点就可以获取其他节点(文本节点,属性节点, 元素节点)
获取所有的子元素
List list=root.elements()

3-5 dom4j技术的扩充–xpath的解析方式
(1)什么是xpath解析
(2)xpath常用方式

3-6 XML与JSON的比较
XML和JSON都可以完成不同系统之间数据交换。
XML体积较大,解析难度较大,所以在现代开发中通常采用JSON进行数据交换,因为JSON体积小,解析简单,而XML通常充当系统当中的配置文件

解析xml的两种形式:
dom4j/xpath

Java基础回顾之XML_第1张图片
person.xml

<?xml version="1.0" encoding="UTF-8"?>
<Person>
	
	<p1>
		<id>A0001</id>
		<name>zs</name>
		<age>23</age>
	</p1>

	<p2>
		<id>A0002</id>
		<name>ls</name>
		<age>24</age>
	</p2>

	<p3>
		<id>A0003</id>
		<name>ww</name>
		<age>25</age>
	</p3>

</Person>
package com.wkcto.test;

import java.util.List;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class Test1 {

	public static void main(String[] args) throws Exception {
		
		/*
		 * 创建出来一个reader对象 阅读器
		 * 该阅读器用来读xml文档
		 */
		SAXReader reader = new SAXReader();
		
		/*
		 * 此时doc对象代表的就是person.xml
		 * 解析doc对象就相当于是解析person.xml了
		 * 所以我们接下来就是对于doc对象的操作
		 */
		Document doc = reader.read("src/com/wkcto/xml/person.xml");
		
		//取得跟元素  Person
		Element root = doc.getRootElement();
		//查看元素的名字
		/*String name = root.getName();
		System.out.println(name);*/
		
		//通过根元素取得一级子元素 p1 p2 p3
		//eList p1 p2 p3
		List<Element> eList = root.elements();
		for(Element e:eList){
			
			/*String ename = e.getName();
			System.out.println(ename);*/
			
			//通过一级子元素取得里面的二级子元素 每一个一级子元素下的id name age
			List<Element> eeList = e.elements();
			
			for(Element ee:eeList){
				
				/*String eename = ee.getName();
				System.out.println(eename);*/
				
				//取得元素下的文本
				String text = ee.getText();
				System.out.println(text);
				
			}
			System.out.println("--------------");
			
		}
		
	}

}
 

第二种解析

package com.wkcto.test;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;

public class Test2 {

	public static void main(String[] args) throws Exception {
		
		/*
		 * 创建出来一个reader对象 阅读器
		 * 该阅读器用来读xml文档
		 */
		SAXReader reader = new SAXReader();
		
		/*
		 * 此时doc对象代表的就是person.xml
		 * 解析doc对象就相当于是解析person.xml了
		 * 所以我们接下来就是对于doc对象的操作
		 */
		Document doc = reader.read("src/com/wkcto/xml/person.xml");
		
		//取得跟元素  Person
		Element root = doc.getRootElement();
		
		/*
		 * Node接口是Element接口的父接口
		 * 
		 * 我们要用的是Element接口
		 * 但是我们现在有的是Node接口
		 * 
		 * 我们要用的是儿子
		 * 但是我们现在有的是父亲
		 * 
		 * 是一个父亲转儿子的过程
		 * 
		 * 父亲:上级
		 * 儿子:下级
		 * 
		 */
		Element e = (Element) root.selectSingleNode("//p1/name");
		
		System.out.println(e.getText());
		
		/*
		 * 
		 * 以上形式为xpath的形式,xpath表示需要你自己写路径找到指定的元素
		 * 
		 * 总结:
		 * 	在实际项目开发中
		 * 	如果需求为遍历出文档中所有的元素及文本,我们习惯于使用传统的dom4j的形式,参见Test1.java
		 *  如果需求为快速的找到指定的xml元素,那么我们习惯于使用dom4j的扩展形式xpath的形式,参见Test2.java
		 * 
		 * 注意:
		 * 	xpath的形式是传统dom4j形式的扩展形式,不能独立存在
		 *  jaxen-1.1-beta-6.jar(支持xpath的jar包)不能独立存在,必须依附于dom4j.jar才能使用
		 * 
		 * 
		 */
		
	}

}



你可能感兴趣的:(java,web开发)