
XML入门与详解v1.0.pdf
16页XML学习笔记~ 1~XML学习笔记一、概述1、 XML(eXtensive Markup Language)可扩展的标记语言,是万维网联盟(World Wide Web Consortium W3C)定义的一种标准可扩展性指允许用户按照XML 规则自定义标记(tags 标签 ) 2、 作用:作为微型数据库,存储数据;作为通信数据;用于不同平台,不用系统交换数据;作为配置文件,为应用程序配置数据;结合样式表语言,展示数据3、 强项:轻松表达多层结构的数据;可扩展优点:平台无关,语言无关设计目标是描述数据并集中于数据的内容,与显示分离提醒:不能用XML 来直接写网页即便是包含了XML数据,依然要转换成HTML格式才能在浏览器上显示4、 xml 特征纯文本严格的格式可扩展(标记可扩展)二、语法XML 文档主要由如下部分组成:XML 声明 -- 处理指令 (Processing Instruction) 元素属性实体注释1、声明(指令)大多数 XML 文档以 XML声明作为开始,它向解析器提供了关于文档的基本信息建议使用XML 声明,但它不是必需的如果有的话,那么它一定是文档的第一行内容如: 声明最多可以包含三个名称- 值对(许多人称它们为属性,尽管在技术上它们并不是)。
结束注释内不能包含双连字符(-- );除此之外,注释可以包含任何内容注释不能写在第一行,标签或注释内注释内的任何标记都被忽略3、标记(标签)内容 :左尖括号““之间的文本XML学习笔记~ 2~1. 在 中的称为开始标记;在中的称为结束标记2. 空标记:不包含元素内容的标记空标签必须以“/> ”结束格式: 注意:除空标记外,标签必须成对:有始有终所有的开始标签和结束标签必须匹配在标记符“ “前面可以有空格或回行XML 的标记是区分大小写的,开始标记与结束标记名称必须严格完全相同XML 标记必须遵循下面的命名规则: 1. 名字中可以包含字母、数字以及其它字母或文字;还可包含下划线(_) 、点 (.)、连字符 (-) 2. 名字不能以数字开头;可以用字母、文字或者下划线开头3. 名字不能以字母xml (或 XML 或 Xml ..) 开头;4. 名字中不能包含空格4、元素位于开始标记与结束标记间一份文档有且只有一个根元素根元素下的所有元素叫“子元素”不包含子元素的元素叫“叶子”;包含子元素的元素叫“分支”5、属性属性是标记的属性,可以为标记添加附加信息属性是一个名值对,必须由名称和值组成,属性必须在标记的开始标记或空标记中声明,用“=“ 为属性指定一个值。
语法如下:XXX 例如 : 所有的属性值必须位于单引号或双引号中每个标记内可以出现多组属性,但是不能出现同名属性开始标志内,类似赋值语句如: ,, 使有属性的原则属性不体现数据的结构,只是数据的附加信息;一个信息是作为一个标记的属性或子标记,取决于具体问题,不要因为属性的频繁使用破坏XML 的数据结构下面是一个结构清晰的XML 文件 : 混凝土 商用 下面是一个结构不清晰的XML 文件 : 6、处理指令处理指令是为使用一段特殊代码而设计的标记,简称为PI 大多数 XML 文档都是以XML 声明开始,该声明本身就是特殊的处理指令处理指令对应用程序特定的数据进行编码一条处理指令包含一个目标,后跟数据用定界符将处理XML学习笔记~ 3~指令包起来目标确定应用程序,而对应用程序不能识别的目标,其会忽略这些处理指令7、实体XML 规范预定义了五个实体 ==== ”==== ,==== 代表实体内容另外,无法从键盘输入的字符可以使用字符引用,就是用字符的Unicode代码点来引用该字符以“ 表示等于号也可以使用字符引用来引用 ,',“, 代表实体内容4) 符号 (NOTATION) 不要解析的外部内容的格式声明。
4、内外部的实体举例内部实体:在xml 文件里面写 ( 少用 ) 外部实体:另外在xml 同一文件夹下建立一个dtd文件 ( 提倡 ) 外部的:goodsName goodsPrice 以下是名为 “goodsInfo.dtd“文件内部的:]> student watch 五、 XML Schema 1、XML Schema 介绍XML Schema用来描述 XML 文档的结构,定义 XML 文档中合法的内容块XML Schema优于 DTD,是 DTD 的替代品XML Schema文件以 .xsd作为文件扩展名XML Schema在 2001 年 5 月 2 日成为 W3C标准Schema 本生也是特殊的XMLxsd 文档的作用:定义可出现在文档中的元素定义可出现在文档中的属性定义哪个元素是子元素定义子元素的次序定义子元素的数目定义元素是否为空,或者是否可包含文本定义元素和属性的数据类型定义元素和属性的默认值以及固定值XML学习笔记~ 7~优点:XML Schema本身就是一个XML XML Schema 支持数据类型XML Schema 支持名称空间XML Schema 约束能力更强大缺点:XML Schema比 DTD 更复杂,不能定义实体。
2、XML Schema 文档结构简单类型(元素,属性,Facet)、复杂类型元素、匿名类型、外置类型Schema 内置了很多类型,常用的类型是:xs:string 字符串xs:decimal 浮点型xs:integer 整型xs:boolean 布尔型xs:date 日期xs:time 时间xs: 是命名空间前缀元素的默认值用属性default指定,例:元素的固定值用属性fixed指定,例:元素出现的次数用属性minOccurs、 maxOccurs来表示,默认值为1, unbounded表示不限制次数例:属性声明语法:属性声明通常会出现在元素声明中,Schema 的内置类型同样对属性类型有效属性的默认值用属性default指定属性的固定值用属性fixed指定属性必须或可选性用属性use 指定use 属性值的取值有: optional(默认值 )(可有可没有), required(必须有) , prohibited(禁止,很少用)Facet(刻面 ) :对 xml 元素或属性的简单数据类型进一步约束限制字符串的长度, 包括 (length、 minLength、maxLength) 限制整数的大小范围,包括 (minInclusive, maxInclusive, minExclusive, maxExclusive) 限制元素内容的枚举取值(enumeration) 限制浮点型数值的位数(totalDigits, fractionDigits) 定义在下列元素中:(此处写Facet )XML学习笔记~ 8~复杂类型元素:包含其他元素和文本或属性的 XML 元素语法:使用元素 来定义四种类型的复杂元素:只包含属性、只包含属性和子元素、只包含文本内容和属性、包含属性,子元素和文本内容。
只包含属性只包含属性和子元素复杂类型元素包含的子元素出现的顺序--- 子元素必须以它们被声明的次序出现--- 子元素是选择关系,只能出现其中一个--- 子元素可按任意次序出现只包含文本内容和属性包含属性,子元素和文本内容匿名类型定义: XML学习笔记~ 9~外置类型定义: // 必须定义在根元素中3、XML Schema 验证 XML Schema 文件XML Schema 文件的根元素一定是 xmlns:xs=“http://www.w3.org/2001/XMLSchema“ 指明schema 中用到的元素和数据类型来自的命名空间“http://www.w3.org/2001/XMLSchema” ,xs 为自定义的前缀名targetNamespace=““ 目标命名空间用于指明此 xsd文档约束的 xml 文件中元素 (note, to, from, heading, body) 的命名空间xmlns=““ XSD 也是一个XML 文档 , schema文档中默认的命名空间是“ http:// ”elementFormDefault=“qualified“Schema 中定义的元素在xml 中使用时,必须被命名空间限定受约束的XML 文件xmlns=““ 缺省命名空间的声明。
此声明会告知 schema 验证器,在此 XML 文档中使用的元素默认都被声明于 “” 这个命名空间xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance“ xsi:schemaLocation=“ note.xsd “ 指定 xsd 的物理位置, 前半部分是名称空间,后半部分参数是物理位置使用的属性schemaLocation需要指定其所在的命名空间六、 SAX 解析 XML XML学习笔记~ 10~1、概述解析 XML 方式: SAX、 DOM 、JAXP 等XML 两大特点:良构性(Well-formed)、有效性 (Validated) 任何 XML 解析器都会检验XML 的良构性特点,但只有部分XML解析器支持有效性校验功能检验有效性,要求XML文档具有校验文档DTD或 Schema SAX 介绍: Simple API for XML,非官方标准基本上所有XML解析器都支持SAX目前版本是2.0 , 不由 W3C等任何官方组织维护,而是由XML-DEV 邮件列表所发展出来的,但它是XML 社区事实上的标准最初设计为Java API,现在 C++,Perl等语言也支持。
SAX 使用一种回调模型与应用代码交互利用SAX 解析 XML 文档,有两个部分:解析器与事件处理器SAX 特性:基于事件驱动快速,轻量级模型( 占用内存少 ) 只能顺序地读取XML文档只能访问一次如果想读取已读过的元素内容,需重新加载文档不能修改文档SAX 基于事件处理模式解析器向一个事件处理程序发送事件,比如元素开始和元素结束,而事件处理器则处理该信息然后应用程序本身就能够处理该数据原始的文档仍然保留完好无损2、实例代码package day02.sax; import java.io.IOException; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.SAXParseException; import org.xml.sax.helpers.DefaultHandler; public class SAXDemo { /** 基于 SAX 方式解析XML 文档 */ public static void main(String[] args) throws SAXException, ParserConfigurationException, IOException { SAXParserFactory factory = SAXParserFactory.newInstance(); // 创建 SAX解析器工厂SAXParser parser = factory.newSAXParser(); // 生成一个具体的SAX解析器XM。
