XML的元素定义
1.标签定义又开始必须要有结束。<ap></ap>
2.标签没有内容,可以在标签内结束。<ap/>
3.标签可以嵌套,但要合理嵌套,不能交叉嵌套。<ap><ad></ad></ap>
4.一个xml中,只能有一个根标签。
5.xml会将空格和换行符都当成内容来解析。
<ap>aaa</ap>
<ap>
aaa
<ap>
2中写法表现出来是不一样的
6.xml区分大小写
<p></p>
<P></P>
是不一样的标签
7.xml标签不能以数字和下划线(_)开头。
8.标签不能以xml(XML)开头;不能包含空格;不能包含冒号:。
9.标签可以是中文。
XML的属性定义
xml是标记性语言,所以也能有属性。
1.一个标签上可以有多个属性。
2.同一标签上的属性名不能相同。
3.属性名称和属性值之间使用“=”,属性值使用引号包起来(单双引号都可以)
4.xml的属性名称规范和元素名称规范一样
XML的注释
写法
<!--xml注释-->
1.注释不能嵌套
2.注释不能放第一行,第一行第一列必须放文档声明
XML的特殊字符
&:替代符号 &
<:替代符号 <
>:替代符号 >
":替代符号 "
':替代符号 '
XML的CDATA区
可以解决多个字符需要转义的情况
使用方法
XML的PI指令
可以在xml中设置样式
写法
<?xml-stylesheet type="text/css" href="目标文件"?>
1.不能放在第一行
2.对中文命名的标签不起作用
XML的约束(DTD)
约束的定义
当创建了一个person的xml文件,只想要里面保存人的信息。但是这时候加进了一个<猫>的标签,虽然语法没有错误,但是很明显这不符合原先的设想,所以需要给xml文件一个约束
约束方法
1.dtd约束
2.schema约束
dtd约束方式
xml文件
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE person(根目录标签名) SYSTEM "1.dtd(dtd文件的目录)">
<person>
<name>SecondMagic</name>
<age>21</age>
</person>
dtd文件
<!ELEMENT person (name,age)>//1
<!ELEMENT name (#PCDATA)>//2
<!ELEMENT age (#PCDATA)>//3
<!--xml文件中有几个标签,dtd文件中就有几个<!ELEMENT标签>-->
<!--复杂复杂元素的写法(有子标签的标签)1-->
<!--简单院徐的写法(无子标签的标签)2,3-->
dtd的三种引入方式
1.使用外部的dtd文件
<!DOCTYPE person(根目录标签名) SYSTEM "1.dtd(dtd文件的目录)">
2.使用内部的dtd文件
<!DOCTYPE 根目录标签名 [
<!ELEMENT person (name,age)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT AGE (#PCDATA)>
]>
3.使用外部的dtd文件(网络上的)
<!DOCTYPE 根目录标签名 SYSTEM "dtd文件名" "dtd文件的URL">
DTD定义元素
<!ELEMENT person (name,age)> 复杂元素
<!ELEMENT person (name+,age)> name标签出现一次或者多次
<!ELEMENT person (name?,age)> name标签出现零次或者一次
<!ELEMENT person (name*,age)> name标签出现零次或者多次
<!ELEMENT name (#PCDATA)> 简单元素(有值时)
<!ELEMENT age EMPTY> 为空时<age></age>
<!ELEMENT age ANY> 有值和为空都可以
复杂元素中子元素
1.用逗号隔开 ,时
表示子元素的出现顺序
2.用|隔开
表示只能出现任意一个
DTD定义属性
语法格式
<!ATTLIST 元素名称
属性名称 属性类型 属性约束
>
属性类型
CDATA:字符串
枚举:(aa|bb|cc)
ID:值只能以字母或者下划线开头
属性的约束
#RUQUIRED
:属性必须存在
#MPLIED
:该属性可有可无
#FIXED
:表示属性的取值为一个固定值。使用时直接在后面加上固定值
DTD定义实体
<!ENTITY TEXT "hello world">
<name>&TEXT;</name> 使用实体方式,显示hello world
XML的解析
xml的解析方式
1.dom
2.sax
dom根据xml的层级结构,将其解析为一棵树,把每部分都封装成对象
使用dom方式解析文件时,如果文件过大,则会造成内存溢出
dom优点:便于进行增删改操作
sax解析采用事件驱动,边读边解析,从上到下,一行一行的解析,解析到一个对象,就返回该对象的名称
sax解析不会造成内存溢出,还可以实现查询,但是不能进行增删改操作