xml简介

XML简介

在这里插入图片描述

XML的简介

		* XML	可扩展的标记语言。(和HTML非常类似的)
			* 可扩展的。
			* 自定义的标签。		
		* XML传输数据,HTML是显示数据。

XML的版本XML1.0(使用该版本)XML1.1(不向下兼容)

	* 应用
		* 作为配置文件。
		* 可以在系统与系统之间进行数据的传输。
			* webserivice	soap	XML封装数据
			* json	和XML概念	

XML的语法

		* 文档声明
			* 写法:	<?xml version="1.0"  ?>
			* 文档声明必须出现在xml文件的第一行和第一列的位置。
			* 属性:
				* version="1.0"				XML的版本	(必须写)
				* encoding="UTF-8"			编码集		(可选的)
				* standalone="yes或者no"	代表xml的文件是否是独立的。(如果是no,不独立,可以引入外部的文件)(可选的)
					* 因为不写该属性,可以引入外部的文件。
			* 乱码解决:
				* 产生的原因:保存文件时和打开文件时采用的编码不一致。
				* 解决办法:保存文件可打开文件采用的编码一致就ok。(MyEclipse不会产生乱码问题)	
		* 元素
			* 开始标签和结束标签。
				* 包含标签主体:	<abcd>文本</abcd>
				* 不包含标签主体:	<abcd/>
			* 不能交叉嵌套	
			* 只能有一个根元素(必须有,并且只能有一个)
			* 命名规范:
				* 区分大小写					错误的:<a></A>	代表两个标签
				* 不能以数字和-中划线开头		错误的:<1a>		<-a>
				* 不能以XML(Xml	XML  xml)开头	错误的:<xmlaa>
				* 不能包含空格和冒号。
		* 属性
			* 自定义:命名规范同上。
			* 在同一个元素上,不能有相同的属性。
			* 可以使用双引号或者单引号。
		* 注释
			* 和HTML的注释相同
			<!-- XML的注释 -->
			* 注释不能嵌套。
		* 特殊字符
			* <		&lt;
			* >		&gt;
			* &		&amp;
			* "		&quot;
			* '		&apos;
		* CDATA区
			* 把标签中的内容作为字符串。
			* 语法:
				<![CDATA[
					内容:当成字符串
				]]>
		* PI(处理指令)
			* 替换HTML

XML的约束

		分为两种: DTD, schema
		<myspring>
			<bean>hello.java</bean>
			<猫/>
		</myspring>
		* 格式良好的XML:遵循语法规范。	
		* 有效的XML:有约束。
DTD的约束
			* 快速入门的步骤:
				* 需要出现哪些标签?
				* 在DTD的文件中编写元素
					<!ELEMENT 元素名称 元素类型>
				* 判断元素是否是复杂还是简单元素?
					* 如果是简单元素:(#PCDATA)	代表是字符串
					* 如果是复杂元素:(子节点)
				* 需要在book.xml引入DTD的文件
					* <!DOCTYPE 根节点 SYSTEM "DTD文件的地址">
			* DTD与XML文档的关联方式
				* 可以在XML的文件中直接书写DTD的代码。(经常使用)
					<!DOCTYPE 根节点 [
						DTD的代码
					]>
				* 引入本地的DTD文件(经常使用)
					<!DOCTYPE 根节点 SYSTEM "DTD文件的地址">
				* 引入网络上的DTD文件
					<!DOCTYPE 根节点 PUBLIC "DTD文件名称" "DTD文件的地址">
			* 元素定义
				* 语法:<!ELEMENT 元素名称	元素类型>
					* (#PCDATA)		字符串
					* EMPTY			空
					* ANY			任意的
					* 子元素:
						* 子元素之间的关系
							* ,		子元素出现是有顺序的
							* |		子元素只能出现一个
						* 子元素出现的次数
							* 	+		子元素出现1次或多次
							* 	*		子元素出现0次或多次
							* 	?		子元素出现0次或1次
					
				<!ELEMENT MYFILE ((TITLE*, AUTHOR?, EMAIL)* | COMMENT)> 	
					<MYFILE>
						<TITLE></TITLE>
						<AUTHOR></AUTHOR>
						<EMAIL></EMAIL>
						<TITLE></TITLE>
						<AUTHOR></AUTHOR>
						<EMAIL></EMAIL>
						<TITLE></TITLE>
						<AUTHOR></AUTHOR>
						<EMAIL></EMAIL>
					</MYFILE>
					
			* 属性定义(AttributeList)
				* 写法:	<!ATTLIST 元素名称 
								属性名称 属性类型 属性约束 
								属性名称 属性类型 属性约束
							>
				* 属性类型
					* CDATA		字符串
					* 枚举(没有提供关键字)	(男人|女人)
					* ID	代表唯一的值,不能只写数字
				* 属性的约束
					* #REQUIRED		必须出现的
					* #IMPLIED		可选的
					* #FIXED		固定值	#FIXED "值"
					* 默认值(不用)
			* 实体定义(用的不多)	
				* <!ENTITY 别名 "值" >
				* 需要在xml中引入别名,浏览器打开文件后,在引入的位置上显示值的。

解析XML

			* 解析XML的方式有哪些呢?
				* 常用的有两种?DOM和SAX 
				* 区别:
					DOM解析XML
					  * 在内存中形成树状结构
					  * 缺点:如果文档过大,容易产生内存溢出的问题。  
					  * 优点:方便做增删改的操作	
					SAX解析
					  * 基于事件驱动,边读边解析
					  * 优点:不会产生内存溢出问题。
					  * 缺点:不能做增删改操作。(DOM4J在内存生成树状结构)
		
			*,只能使用DOM方式,如果SAX,只能做查询。
			* DOM4J    JAXP				SUN提供的
				* 想做增删改	企业都在用。DOM4J提供的
				* 全部都可以做。
			* JDOM
		* JAXP的解析HTML
			* DOM
				* DocumentBuilderFactory	:解析器工厂类
				* DocumentBuilder	获取解析器对象
				* 解析XML(Document parse(String uri) )
					// 获取解析器工厂类
					DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
					// 获取解析器对象
					DocumentBuilder builder = factory.newDocumentBuilder();
					// 解析XML的文档,返回document对象
					Document document = builder.parse("src/book2.xml");
			* 回写
				* 获取回写的工厂类
				* 获取回写对象
				* 调用回写的方法进行回写。
					// 创建回写类的工厂
					TransformerFactory transformerFactory =  TransformerFactory.newInstance();
					// 获取回写类
					Transformer transformer = transformerFactory.newTransformer();
					// 调用回写的方法
					transformer.transform(new DOMSource(document), new StreamResult("src/book2.xml"));
schema约束:
		* schema和DTD的对比:
			* schema符合XML的语法结构。		
			* 可以解析schema文档。
			* schema对名称空间支持的好。				
			* schem支持更多的数据类型,自定义的数据类型。
		* 预先定义元素和属性
		* schema的后缀名是.xsd
		* 只能有一个根节点,名称是schema。
		* 开发步骤
			* 开发schema的约束文档
				* 引入W3C的名称
					* 在根节点上,使用属性xmlns(xml namespace)
					* xmlns="http://www.w3.org/2001/XMLSchema"
				* 定义元素
					* <element name="书架"></element>
				* 判断是否是复杂还是简单的元素
					* 如果是简单	在element有属性	type="数据的类型"	
					* 如果是复杂	
						* 声明标签是复杂的元素	<complexType>
						* 子元素之间的关系	<sequence>
				* 起名:targetNamespace	目标名称空间(起名)
					* 值是任意的:http://www.itcast.cn/1110
				* elementFormDefault	: 
					* qualified(使用)	:质量好的
					* unqualified		:质量不好的
			* 在XML文档中引入自己编写的schema文档
				* 引入W3C名称空间,我是实例文档。
					* xmlns="http://www.w3.org/2001/XMLSchema-instance"
				* 引入自己编写的schema的文档
					* xmlns="http://www.itcast.cn/1110"
				* 问题:元素上不能有相同的属性名称
					* 解决:起别名		:aa
					* 技巧:在下面出现标签的概率小起别名
				* 引入自己编写的schema文档的地址
					* schemaLocation属性是W3C提供的,如果W3C名称空间要是有别名的话,先把别名写上。
						xsi:schemaLocation="名称空间   schema文件的地址"
		* 名称空间的概念
			* 编写完schema文档,起唯一的名称空间。
			* 在编写XML文档,通过xmlns来引入名称空间。

XML的编程

	* JAXP的SAX解析
		* 只能做查询,不能做增删改。
		* SAX解析
			* 解析器
				* 获取解析器的工厂
				* 获取解析器对象
				* 解析XML(XML的文件的地址,事件处理器)
			* 事件处理器
				* 自己编写的类,需要继承DefalutHandler类,重写三个方法。
				* startElement()
				* characters()
				* endElement()	
		* SAX的解析原理:		
			解析器采用SAX方式在解析某个XML文档时,它只要解析到XML文档的一个组成部分,		(边读边解析)
			都会去调用事件处理器的一个方法,解析器在调用事件处理器的方法时,
			会把当前解析到的xml文件内容作为方法的参数传递给事件处理器。
			事件处理器由程序员编写,程序员通过事件处理器中方法的参数,
			就可以很轻松地得到sax解析器解析到的数据,从而可以决定如何对数据进行处理。
	* DOM4J的解析(必须会,企业中用的多)
		* 先下载DOM4J相应的jar包。导入工程中,才能使用。
		* 把dom4j-1.6.1.jar导入到工程中。
		* WEB项目:复制dom4j-1.6.1.jar到	WebRoot -- WEB-INF -- lib里面。就ok了。
	* DOM4J对XPATH的支持
		* 导入包。jaxen-1.1-beta-6.jar。
		* 怎么使用?
			selectNodes("/AAA")			返回集合
			selectSingleNode()		一个Node对象
		* 参数就是xpath的语法
			* /AAA/BBB			获取BBB的节点
			* //BBB				无论层级关系,找到BBB的节点
			* *					代表是所有
			* /AAA/BBB[1]		找到BBB的第一个		/AAA/BBB[last()]	最后一个
			* @					属性
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值