XML
xml语法
XML标记文本,用来描述数据的性质和结构,严格区分大小写,有且只能有一个根元素,属性值必须放在 引号中,空格不会自动删除,标记可以随便定义并且可拓展
一个完整的XML文档中必须包含一个XML文档声明该声明必须位于文档的第一行
<? xml 版本信息 [编码信息][文档独立性信息]?>
1.版本声明
<? xml version="1.0" ?>
2.文档编码声明
<? xml version="1.0" encoding="gb2312"?>
3.独立文档声明
standalone="yes";独立文档不依赖外部文档
standalone="no"
<? xml version="1.0" encoding="gb2312" standalone="yes"?>
特殊字符处理
特殊字符
&-----&
<-----<
>----->
"------"
'-------&apos
CDATA区
是Character data的简写不想被程序解析的一段原数据可以放在CDADA中
用法
<![CDATA[ &^*s!@#$]]>
XML的解析方式概述
1、解析方式:(W3C)
DOM:Document Object Model文档对象模型
Node:节点
Document:代表整棵树
Element:元素
Attr:属性(只有元素才有属性)
Text:文本
有点:增删改查方便,简单
缺点:需要读取整个xml才能构建DOM树。对于比较大的xml,容易导致内存溢出。
l SAX:Simpl API for Xml
利用JAXP开发包:DOM解析
1、常用的XML解析器:
JAXP、Dom4J、JDom
2、JAXP:
存在JDK中,SUN公司提供。
Java API for XML Processing=JAXP
由以下包:
org.w3c.dom:标准和规范(学习规范)
javax.xml:具体的实现
dtd约束
2、约束技术:DTD(简单,面临着淘汰) Schema
3、DTD:
约定了xml文件中可以出现的元素、属性等,及他们的顺序和个数。
DTD约束,文件的扩展名.dtd
4、编写DTD的方式:
方式一:dtd内容和xml都在xml文件中
直接把dtd的内容写在xml文件中。
比如:
<?xml version=”1.0” encoding=”gbk”?>
<!DOCTYPE 书架[
<!ELEMENT 书架 (书+)>
<!ELEMENT 书 (书名,作者,售价)>
<!ELEMENT 书名 (#PCDATA)>
<!ELEMENT 作者 (#PCDATA)>
<!ELEMENT 售价 (#PCDATA)>
]>
<书架>
</书架>
方式二:dtd作为单独的文件存在(推荐)。文件扩展名.dtd,文件必须用UTF-8编码保存到磁上。
根据它的语法创建的文件称为DTD文件
1.<!ELEMEMT 书架(书+)>(书+)表示至少有一个书元素
2.<!ELEMEMT 书(书名,作者,售价)>书是元素名称,(书名,作者,售价)是书的子元素必须按照顺序出现
3.<!ELEMEMT 书名(#PCDATA)>
4.<!ELEMEMT 作者(#PCDATA)>
5.<!ELEMEMT 售价(#PCDATA)>#PCDATA普通文本字符串
引入外部DTD文件有两种方式
1.<!DOCTYPE 根元素名称 SYSTEM "外部DTD文件的URI">
2.<!DOCTYPE 根元素名称 PUBLIC "DTD名称"SYSTEM "外部DTD文件的URI">
还可以采用内嵌的方式
<!DOCTYPE 根元素名称[
DTD定义语句
]>
EMPTY:表示元素不包含字符数据是一个空元素.<!ELEMEMT br EMPTY>br是一个没有内容的元素
ANY:表示元素可以包含任意的子元素和字符数据<!ELEMEMT l联系人 ANY>
属性定义
<!ATTLIST 元素名
属性名1 属性类型 设置说明
属性名 2 属性类型 设置说明
.>
设置说明
1.#REQUIRED
元素属性是必须的
2.#IMPLIED
元素可以包含该元素
3.#FIXED
一个固定的属性默认值
4.默认值
如果元素不包含该元素,该属性将自动设置为DTD中定义的默认值
属性类型
1.CDATA
2.Enumerated
3.ID用于唯一标识XML文档中的一个元素
4.IDREF和IDREFS可以使两个元素建立一对一的关系
5.NOTATION不易用XML组织的数据
6.NMTOKEN表示一种列表类型
7.ENTITY和ENTITYS
Schema约束
名称空间
唯一标识一个元素或者属性
属性名称必须以xmlns:作为前缀<元素名 xmlns:prefixname="URL">
默认名称空间<元素名 xmlns="URL">
引入Schema文档
1.使用名称空间引入XML Schema文档
需要通过属性xsi:schemaLocation来声明名称空间的文档,
2.不使用名称空间引入
xsi:noNamespaceschemaLocation
语法
元素定义
<xs:element name="xxx" type="yyy"/>
属性定义
<xs:attribute name="xxx" type="yyy"/>
简单类型
xs:simpleType
限制xs:restriction
xs:minInclusive,xs:maxInclusive对值的限定
xs:enumeration元素对一组值的限定
xs:pattern元素对一组值的限定
xs:restriction元素对空白符的限定
复杂类型
xs:simpleContent
XML中如何引入Schema约束(必须掌握)
1、查看Schema文档,找出根元素
2、根元素来自哪个名称空间
查看Schema的文档,找到targetNamespace的取值,在xml中用xmlns关键字声明该名称空间。”itheima”就是给名称空间取了一个短名称。
3、名称空间和哪个xsd文件对应?
使用schemaLocation来制定名称空间和xsd文件的对应关系
4、schemaLocation不是关键字,来自一个标准的名称空间
XML中如何引入Schema约束
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.hhh.com" elementFormDefault="qualified">
<xs:element name='书架'>
<xs:complexType>
<xs:sequence maxOccurs='unbounded'>
<xs:element name='书'>
<xs:complexType>
<xs:sequence>
<xs:element name='书名' type='xs:string' />
<xs:element name='作者' type='xs:string' />
<xs:element name='售价' type='xs:string' />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
<?xml version="1.0" encoding="UTF-8"?>
<hhh:书架 xmlns:hhh="http://www.hhh.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.hhh.com book.xsd">
<hhh:书>
<hhh:书名>故事</hhh:书名>
<hhh:作者>哈哈</hhh:作者>
<hhh:售价>10块</hhh:售价>
</hhh:书>
</hhh:书架>