xml
文档声明(必须再第一行)
-- 简单声明
<?xml version="1.0"?>
-- 简单声明1
<?xml version="1.0" encoding="utf-8"?>
-- 简单声明2(代表是否是独立文件和外部无关系)
<?xml version="1.0" encoding="utf-8" standalone="no"?>
标签
1. 文档下的第一个元素为根标签
2. 空标签(一般配合属性使用)
<info/>
属性定义
<name id="123">张三</name>
CDATA(内部东西会被解析器忽略)
<desc><![CDATA[<a href="www.baidu.com"/>]]></desc>
XML解析
一个xml可以引用多个schema约束,但是只能引用一个DTD约束
DOM解析
会把整个dom读取内存在,形成树状结构.整个文档称之为Document对象,属性对应Attribute对象,所有节点元素对应Element对象,文本也可以称为Text对象,以上所有对象统称Node节点。对于大文件操作可能内存溢出,可以对文档进行增删操作
SAX(simple api for xml)解析
基于事件驱动,读取一行,解析一行。内存消耗小,只能查询不能增删
XML的约束(以下只是泛泛而谈,深入看文档)
DTD
DTD语法自成一派,可读性差,解析慢
stus.dtd
<?xml version="1.0" encoding="UTF-8"?>
<!--内部stu只能有一个 -->
<!--<!ELEMENT stus (stu)>-->
<!--内部stu可以有多个,+ 一个或多个,?是0个或1个, *代表0个或多个-->
<!ELEMENT stus (stu)+>
<!-- 内部name,age是有顺序的-->
<!ELEMENT stu (name,age)>
<!-- 两个当中选一个-->
<!-- <!ELEMENT stu (name|age)>-->
<!ELEMENT name (#PCDATA)>
<!-- (#PCDATA)代表内容为字符元素 -->
<!ELEMENT age (#PCDATA)>
<!--定义属性 -->
<! ATTLIST stu id CDATA #IMPLIED>
stus.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- 引入dtd约束xml -->
<!-- 引入网络文件
<!DOCTYPE stus PUBLIC "//UNKNOWN/" "unknown.dtd">
-->
<!-- 引入本地文件 -->
<!DOCTYPE stus SYSTEM "stus.dtd">
<!-- 内嵌DTD -->
<!-- <!DOCTYPE stus[
<!ELEMENT stus (stu)>
<!ELEMENT stu (name,age)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
]> -->
<stus>
<stu id="122">
<name >张三</name>
<age>18</age>
</stu>
<stu id="122">
<name >张三</name>
<age>18</age>
</stu>
</stus>
Schema
DTD的继承者,使用xml语法,解析方便,为了替代DTD(但是没成功,因为阅读性差,编码多)
stus.xsd
<?xml version="1.0" encoding="UTF-8"?>
<!-- xmlns: xml namespace 命令空间 elementFormDefault:元素的格式化情况 targetNamespace:目标空间,下面这些元素都与这个目标空间绑定 -->
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/stus"
elementFormDefault="qualified">
<element name="stus">
<!-- 声明stus是复杂元素 -->
<complexType>
<!-- stu节点最大出现的次数 ,同理还有最少出现次数,还有一些其他值快捷键提示即可-->
<sequence maxOccurs="2">
<element name="stu">
<!-- 声明stu是复杂元素 -->
<complexType>
<sequence>
<!-- 以下两个是简单元素 -->
<element name="name" type="string"></element>
<element name="age" type="int"></element>
</sequence>
</complexType>
</element>
</sequence>
</complexType>
</element>
</schema>
stus.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- xmlns:xsi 这里值是固定的,必须这样写
xmlns 对应stus.xsd中的targetNamespace值
xsi:schemaLocation="{namespace} {location}"
注意中间有空格
中对应的namespace则是xmlns的值
location是xsd文件对应的路径
-->
<stus
xmlns="http://www.example.org/stus"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.example.org/stus stus.xsd"
>
<stu>
<name >张三</name>
<age>18</age>
</stu>
<stu>
<name >张三</name>
<age>18</age>
</stu>
</stus>
网友评论