1、XML是可扩展标记型语言,类似HTML,主要功能是存储、传输数据而非显示数据。可扩展则标签可以自定义。XML是w3c组织发布的技术。
2、xml的应用:
①不同系统之间传输数据:标签标记易于维护和不同系统的读取、使用
②用来表示生活中有关系的数据:标签的包含关系
③经常用在配置文件之中
3、xml语法:
①XML的文档声明:(创建后缀名为.xml的文件)
文档声明(第一行第一列):<?xml version="1.0" encoding="gbk" standalone="no"?>最一个属性是否依赖其他文件
XML中文乱码问题解决:
原因:本地硬盘数据保存一般为gbk格式,当文件设置的编码不为gbk时,打开文件时就会出现乱码
如果不想出现乱码就需使设置保存时的编码和打开时的编码一致。
②xml的元素定义
标签包含主体内容则必须有结束,不包含主体内容则可以在标签内结束(<br/>);
一个文件中只能有一个根标签;
对于xml标签中出现的所有空格和换行,XML解析程序都会将其当做标签内容进行处理;
xml标签命名区分大小写,且标签名不能以数字、特殊字符和_开头,不能包含空格和冒号。但是标签可以是中文
③XML属性的定义:属性的命名规范同标签命名,属性值可以使用单引号或双引号引起来。
④注释:<!-- -->注释不能嵌套,注释也不能放在第一行(第一行是声明)
⑤特殊字符需要转义:&→&<→<>→>(注意有分号)
⑥XML的CDATA区:解决同时需要转义多个字符的情况,将其放入CDATA区,将其作为文本内容而不是标签:<![CDATA[ 内容 ]]>
⑦XML的PI指令(设置指令):可以在xml中引入样式(一般不用)
一般放在第二行:<?xml-stylesheet type="text/css" href="css路径"?>(样式对中文标签不起作用)
⑧【重要】XML约束技术:DTD约束(还有一个schema约束)
>创建后缀名为.dtd的文件,内容:
复杂元素,即有子元素的元素:<!ELEMENT person (name,birthday)>(需进行约束的.xml文件中元素)
简单元素写法:<!ELEMENT birthday (#PCDATA)>
<!ELEMENT age (#PCDATA)>
注:空格必须有
而后,在xml文件中引入dtd文件:
引入方式一:<!DOCTYPE 根元素名称 SYSTEM "dtd文件的路径">
方式二:直接写在xml文档中:<!DOCTYPE 根元素名称 [dtd文件内容] >
方式三:使用外部的dtd文件(网络上的dtd文件):<!DOCTYPE 根元素名称 PUBLIC "DTD名称" "DTD文档的URL" >
此时,在xml中如果有了除上述dtd约束文件以外的元素,则会报错,但是浏览器打开的xml文件只校验xml语法,并不校验约束,所以需要使用工具查看
>使用dtd定义元素:
语法:
简单元素:<!ELEMENT 元素名 约束>
例:(#PCDATA)即约束元素为字符串类型
EMPTY 约束元素内容为空
ANY 任意
复杂元素:
(子元素[+/?/*],子元素...)
+表示该元素出现一次或多次;?表示一次或0次;*表示任意次数
子元素之间以|分割表示这些元素仅能出现任意一个
>使用DTD定义属性
<!ATTLIST 元素名称 属性名称 属性类型 属性约束>
属性值类型:
PCDATA:表示属性值的取值为普通的文本字符串
枚举类型:(a|b|c)
ID:表示属性的取值不能重复
属性约束设置:
#REQUIRED表示属性必须有
#IMPLIED表示属性可有可无
#FIXED表示属性值必须是设置的固定值
属性类型后面后直接跟属性值,不要属性约束,即直接值,表示使用该固定属性值
<!ELEMENT person (name,birthday)>
<!ELEMENT birthday (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ATTLIST birthday ID1 CDATA #FIXED "123">设置了固定的属性值
>定义实体:<!ENTITY 实体名称 实体内容>
在xml中引用实体内容:&实体名称
定义实体需要写在内部dtd中,如果写在外部dtd里,某些浏览器读取不到。
⑨Schema约束
>特点:
基于XML的DTD替代者,即其符合xml语法。
一个xml可以有多个Schema约束(一个xml只能有一个dtd约束),多个Schema使用名称空间区分。
Schema中支持更多类型。
Schema语法更加复杂,所以目前并未完全替代dtd。
>创建Schema文件:后缀名.xsd;需要声明;根节点<schema>;
在schema文件中是有w3c提供的属性和标签约束xml文件;
示例:
<?xml version="1.0" encoding="UTF-8"?>
<!-- xmlns属性表示该xml文件是一个约束文件 -->
<!-- targetNamespace表示:如果要使用该schema文件可通过属性值地址引入(该地址可以自定义任意类型,一般为避免重复使用的是URL地址) -->
<!-- elementFormDefault属性表示质量良好 -->
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/NewXMLSchema" elementFormDefault="qualified">
<!-- 复杂元素 -->
<element name="person">
<complexType>
<sequence><!--表示元素按照顺序出现,另外,还有<choice>表示元素仅能出现其中一个,<all>表示只能出现一次,-->
<!-- 简单元素 -->
<element name="name" type="string"></element><!-- 元素可选属性maxOccurs="unbounded"表示元素出现的次数:没有限制 -->
<element name="age" type="int"></element>
</sequence>
</complexType>
</element>
</schema>
注:
①在复杂元素下( </complexType>内)还可以定义属性:<attribute name="id" type="int" use="required"></attribute>,其中use属性表示必须出现。
②若在<sequence></sequence>添加元素<any></any>其表示在xml文件中此处可插入任意一个元素
在person.xml中引入约束文件:
<!-- 第一个xmlns:xsi属性加上-xsi是别名(名称空间),为了区别于第二个xmlns属性。instance表示该xml文件是被约束文件 ;第二个xmlns属性表示要引入的约束文件;第三个属性是定义命名空间 :约束文件地址空格约束文件名-->
<person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.example.org/NewXMLSchema"
xsi:schemaLocation="http://www.example.org/NewXMLSchema NewXMLSchema.xsd"></person>
>引入多个schema约束文件时:
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"指定该文件是被约束文件
xmlns="http://www.example.org/NewXMLSchema" 其中一个约束文件地址
xmlns:任意别名="第二个约束文件地址"
xsi:schemaLocation="http://www.example.org/NewXMLSchema NewXMLSchema.xsd 第二个约束文件地址 第二个约束文件名"
在xml文件中引入时:
如果引入的是起了别名的约束文件中的元素则:<别名:元素名>