前言
1.xml eXtensible markup language 可扩展标记语言 2.xml作用: a.交互数据; b.保存数据; c.配置文件 3.xml和html 1) html 超文本标记语言: a.数据展示和用户体验.; b.标记是固定的。 2) xml 可扩展标记语言; a.数据本身。 b.标记可扩展,可以自定义。 4.xml解析 1.xml解析器 2.浏览器 3.myeclipse 5.xml 文件的声明 <?xml version="1.0" encoding="GBK" ?> version:文件版本号 encoding:文件编码格式
正文
XML(Extensible Markup Language,可扩展标记语言) 一种用来存储和传输数据的元语言( 元语言:一种定义了与其他特定领域有关的,结构化的,语义化的语法语言).
与HTML的区别
HTML由W3C规范和定义 ;XML可由用户自定义; XML定义和规范了HTML
XML的优点
1.XML简化了数据的传输 2.XML简化了数据的共享 3.XML简化了平台的变更
XML的语法
文件的后缀.xml <关键字>标签体</关键字> 关键字大小写敏感 <!--注释 -->
格式良好的XML文档
1.XML文档的第一行必须有声明 2.关键字不能以数字下划线开始,可以包涵数字下划线字母 3.关键字不能以XML/Xml/xml/开始 4.标签要合理嵌套 5.标签要成对出现,单标签要正确结束 6.属性要以键值对的形式出现,属性值要用""或者''引起来 7.有且仅有一对根标签
浏览器默认校验XML是否是格式良好的
有效的XML = 格式良好的XML+DTD/Schema语法校验
DTD(Document type Definition,文档类型定义)
定义XML的语法规范
XML文档定义引入DTD
1.内部DTD(定义声明在XML文档内部) 2.外部DTD(定义声明DTD在XML文档的外部) DTD文件的后缀名.dtd
内部定义: <!DOCTYPE 根标签 [DTD语法]> 外部DTD引入 <!DOCTYPE 根标签 SYSTEM "DTD文件的路径">
注: 使用XMLSPY软件来校验XML的有效性
DTD 定义元素
<!ELEMENT 元素名称 (元素类型)>
元素类型
#PCDATA 所有字符数据 ANY 表示任何数据 EMPTY 不能含有任何内容
定义纯元素:只含有子元素的元素
<!ELEMENT book (title)> 只含有一个子元素的纯元素 <!ELEMENT book (title,author)> 多个子元素有出现的先后顺序用逗号分隔 <!ELEMENT book (title|author)> 多个用|分隔 只能取其一 相当于or <!ELEMENT book (title+,author)> +表示元素可出现至少一次 <!ELEMENT book (title?,author)> ?表示0次或者一次 <!ELEMENT book (title*,author)> * 表示任意次数 <!ELEMENT book (title*,(author1|author))>
混合元素
<!ELEMENT firstname (#PCDATA|author)*> 元素中可以包含子元素和文本的混合 <!ELEMENT firstname (#PCDATA|author|author1)*>
属性的定义
<!ATTLIST 元素名称 属性名称 属性值的类型 属性特性>
1.属性值类型 CDATA 所有字符数据 NMTOKEN(name token) 是CDATA的子集 不能包涵"<"">" ,不能包含空格 NMTOKENS 是CDATA的子集,不能包涵"<"">" 能包含空格 ID 属性值为当前标签的唯一标识,不能是纯数字,不能以数字开始 IDREF 属性值只能是其他ID类型的值 IDREFS 属性值同时引用多个ID类型的值,多个值之间用空格隔开 2.属性特点 #REQUIRED 必须出现 <!ATTLIST title name CDATA 'hello' > 设置属性不出现并且设置默认值 #IMPLIED 可选的 #FIXED 固定值 3.例子: <!ATTLIST title name CDATA #FIXED '中国' >
实体
< > © "
自定义实体
在外部DTD中<!ENTITY 实体名称 '实体表示内容' > 在XML中 &实体名称;
Schema
是xml中一种用来定义约束XML文档结构的语法规范
DTD的不足
1.数据类型有限 2.不可扩展 3.不支持命名空间 4.DTD的语法与XML的语法形式不同
Schema的语法
schema 文档后缀 .xsd
书写一个schema文件
xml声明 <?xml version="1.0" encoding="utf-8"?> 书写schema的根标签 <xs:schema 定义一个命名空间的别名(别名xs 别名所代表的命名 http://www.w3.org/2001/XMLSchema ) xmlns:xs="http://www.w3.org/2001/XMLSchema" 定义当前文档的命名空间 xmlns="guopeihaoren" 目标XML文档引用的命名空间 targetNamespace="guopeihaoren" 当前定义的元素是否纳入当前命名空间的规范 elementFormDefault="qualified" 当前定义的属性是否纳入命名空间的规范 attributeFormDefault="unqualified" 值:qualified 纳入命名空间的规范 unqualified 不纳入命名空间的规范 > 定义一个元素 <xs:element name="class" type="xs:int"></xs:element> </xs:schema>
书写目标XML文件 XML声明 <?xml version="1.0" encoding="utf-8"?>
书写XML根标签 <my:class 根标签的引用命名空间 xmlns:my="guopeihaoren" 定义命名空间xsi的命名空间值 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 定义当前XML文档所引用的schema文件的路径:命名空间 schema文件名 xsi:schemaLocation="guopeihaoren classSchema.xsd" >123</my:class>
定义元素 <xs:element></xs:element> 属性:name 定义标签名称 type 定义元素体的取值类型 maxOccurs 当前元素在父标签中的最大出现次数 minOccurs 当前元素在父标签中最小出现的次数 default 设置元素的默认值 fixed 设置元素的固定取值
属性type取值: 基本数据类型、简单数据类型、复杂数据类型
基本数据类型
xs:string xs:int xs:boolean xs:double xs:date xs:time xs:decimal 任意精度类型
简单类型数据
<xs:simpleType name=""></xs:simpleType>
内嵌式
<xs:element name="class" > <xs:simpleType > <xs:restriction base="xs:int"> <xs:maxExclusive value="100"></xs:maxExclusive> </xs:restriction> </xs:simpleType> </xs:element>
嵌入式:元素不能设置type属性 simpleType 不能设置name 属性
引用方式
<xs:element name="class" type="testSimple"></xs:element> simpleType name 属性:标识当前simpleType类型
1.简单类型对值进行约束
<xs:simpleType name="testSimple"> 规范简单类型的取值的约束 base属性:简单类型取的基本类型的值 <xs:restriction base="xs:decimal"> <!--设置取值的上限不包含边界 <xs:maxExclusive value="100"></xs:maxExclusive> 设置取值的下限不包含边界 <xs:minExclusive value="90"></xs:minExclusive> 设置取值的上限包含边界 <xs:maxInclusive value="100"></xs:maxInclusive> 设置取值的下限包含边界 <xs:minInclusive value="90"></xs:minInclusive> 设置数字类型的最大位数 <xs:totalDigits value="3"></xs:totalDigits> 设置小数点后的小数最大位数,注意只能在xs:decimal这种类型下设置 <xs:fractionDigits value="3"></xs:fractionDigits> 设置字符串的精准长度 <xs:length value="4"></xs:length> 设置字符串的最大长度 <xs:maxLength value="5"></xs:maxLength> 设置字符串的最小长度 <xs:minLength value="3"></xs:minLength> 多个取其一 <xs:enumeration value="big"></xs:enumeration> <xs:enumeration value="middle"></xs:enumeration> <xs:enumeration value="small"></xs:enumeration> 采用正则表达式校验 <xs:pattern value="(13|14|15|18)d{9}"></xs:pattern> 对于空白字符的处理方式 <xs:whiteSpace value="collapse"></xs:whiteSpace> --> </xs:restriction> </xs:simpleType>
元素的type属性设置成simpleType 的name属性值
2.简单类型中的列表类型
<!--设置列表类型 <xs:list itemType="xs:int"></xs:list> -->
3.简单类型中的联合类型
<!--联合类型 同时引用多个简单类型 实现取值多样化,简单类型名称之间以空格隔开-->
<xs:element name="class" type="testSimple"></xs:element> <xs:simpleType name="testSimple"> <xs:union memberTypes="str digital"></xs:union> </xs:simpleType>
<xs:simpleType name="str"> <xs:restriction base="xs:string"> <xs:enumeration value="china"></xs:enumeration> <xs:enumeration value="usa"></xs:enumeration> </xs:restriction> </xs:simpleType> <xs:simpleType name="digital"> <xs:restriction base="xs:int"> <xs:pattern value="d{3}"></xs:pattern> </xs:restriction> </xs:simpleType>
复杂数据类型
1.定义子元素的出现先后顺序
<xs:complexType name="com1"> 定义子元素出现的先后顺序 <xs:sequence maxOccurs="unbounded" minOccurs="1"> 子元素在父元素中出现的次数 (要以一个整体形式出现 ) <xs:element name="student1" type="str"></xs:element> <xs:element name="student2" type="digital"></xs:element> </xs:sequence> </xs:complexType>
2.子元素间没有顺序
<!--定义多个 子元素没有先后顺序--> <xs:complexType name="com2"> <xs:all > <xs:element name="student1" type="str"></xs:element> <xs:element name="student2" type="digital"></xs:element> </xs:all> </xs:complexType>
3.多者选其一
<!--定义多个子元素中取其一--> <xs:complexType name="com3"> <xs:choice > <xs:element name="student1" type="str"></xs:element> <xs:element name="student2" type="digital"></xs:element> </xs:choice> </xs:complexType>
4.定义属性
<!--定义属性--> <xs:complexType name="com4"> <xs:attribute name="name" type="xs:int" use="required"></xs:attribute> use属性 :optional 属性是可选的 required 必须的 prohibited 属性禁止设置
fixed : 设置属性固定值 default:设置属性的默认值 </xs:complexType>
5.设置子元素同时还有属性
<xs:complexType name="com2"> <xs:all > <xs:element name="student1" type="str"></xs:element> <xs:element name="student2" type="digital"></xs:element> </xs:all> <xs:attribute name="name" type="xs:int" use="required"></xs:attribute> </xs:complexType>
6.设置父元素中含有子元素同时含有文本
通过mixed="true"属性设置混合 <xs:complexType name="com2" mixed="true"> <xs:all > <xs:element name="student1" type="str"></xs:element> <xs:element name="student2" type="digital"></xs:element> </xs:all> <xs:attribute name="name" type="xs:int" use="required"></xs:attribute> </xs:complexType>
7.通过simpleContent 约束复杂类型的内容的形式
<xs:complexType name="com5"> <xs:simpleContent> base属性设置元素的内容类型 <xs:extension base="str"> <xs:attribute name="name" type="digital" use="required"></xs:attribute> </xs:extension> </xs:simpleContent> </xs:complexType> <xs:complexType name="com5"> <xs:simpleContent> base属性设置元素的内容类型 <xs:restriction base=""> </xs:restriction> </xs:simpleContent> </xs:complexType>
8.创建元素组
9.创建属性组
dtd代码示例:
1.struts.xml配置文件
2.struts.dtd是针对struts.xml配置文件写的约束
schema代码示例:
1.classXml.xml 测试schema的配置文件
2.classSchema.xsd
总结
元素
1. 开始标记和结束标记以及标记之间内容. 2.xml文件是一个树状结构,元素有一个"根部",然后 在扩展"枝叶". 3. xml文件是包括一个单一元素中,这个元素我们称之为 "根元素"。根元素是必须的。 4. 元素的规则: 元素大小写敏感。 元素要正确嵌套。 元素要关闭。 空元素:标记之间没有内容。称之为空元素. 可以简写<desc/>
实体引用
> > < < & & " " ' '
属性
属性要使用引号括起来。 可以是双引号或者单引号都可以,但是要保持一致。
CDATA类型数据(特殊标签)
实体引用都会被忽略,把整个数据当作一块文本数据来看待。 格式<! [CDATA[文本数据]]>
注释
<!--注释的内容-->
11."格式良好"的xml 遵守正确语法的xml文件被称为"格式良好"的xml。
需要遵守的规则: a.xml文件必须要有根元素。 b.xml文件的标记必须正确关闭。 c.xml文件标记大小写敏感。 d.xml文件属性要有引号括起来。 e.xml文件标记必须要正确嵌套。
DTD
Document Type Definition 文档定义类型 定义xml文件结构,和xml文件标记的规则。 DTD文件可以定义在XML文件中,也可以定义在XML文件外部
1. DTD类型:
PUBLIC(行业公用的) SYSTEM(小范围自定义的)
2. DTD中定义规则 *表示出现0-n次 #PCDATA表示字符串 +表示出现1-n次 |表示或者(phone|mobile) 只能出现一个 ?表示出现0-1次 ATTLIST 标记名称 属性名 类型 标记名称 id CDATA #REQUIRED 表示属性是必须的 标记名称 id CDATA #IMPLIED 表示属性不是必须的 标记名称 hot CDATA "false" 表示hot的默认值是false 如果定义了 值就取定义的值,如果没有定义 就取默认值 false
Schema
Schema 和DTD 都是用来描述XML文件结构。DTD无法解决名称冲突的问题, 所以Schema出现了,支持命名空间(解决不同来源的DTD标记相同的问题)。 Schema使用的是XML语法(自身就是XML),xml也称作自描述语言。 Schema文件的扩展xsd. Schema名词: 复杂元素(有子元素的元素) 简单元素(叶子元素)
java API解析XML文件
解析xml方式:
a.DOM (Document Object Model) 优点:把xml文件放到内存中为一个树状结构,可以遍历和修改节点。 缺点:当文件比较大的时候,内存压力比较大,读写速度慢。 b.SAX(Simple API for XML) 把xml文件做为一个流,当触发标记开始、标记内容开始、标记结束这些动作。 优点:可以马上开始,速度快,没有内存压力 缺点:不能修改节点 JDOM/DOM4J 这是目前市场上比较流行的两种方式 DOM4J 结合了DOM和SAX两种解析方式的优点。 DOM4J API写 XML文件 常用API方法: addElement(节点名称);//添加元素 setText(字符串);//给元素添加值 addAttribute(属性名称,属性值);//添加属性 (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|