XML文档结构
XML声明
XML声明说明XML文档的基本信息,包括版本号与字符集,写在XML第一行
<!-- version: 版本, encoding:字符集-->
<?xml version="1.0" encoding="UTF-8"?>
XML根标签
每个xml文档有且只有一个根标签
每一个xml文档必须拥有“根标签”
标签是有上下级关系的,上级为“父标签”,下级为“子标签”
<employee>
<name>张三</name>
<age>35</age>
<salary>5000</salary>
<department>
<dname>会计部</dname>
<address>XX大厦-B301</address>
</department>
</employee>
XML标签书写规则
合法的标签名
- 标签名要有意义
- 建议使用英文,小写字母,单词之间使用“-”分割
- 建议多级标签之间不要存在重名的情况
适当的注释与缩进
合理使用属性
<employee no="3309">
特殊字符与CDATA标签
- 使用实体引用解决特殊字符
- 使用CDATA标签解决特殊字符
<!-- 被包裹在CDATA标签中的特殊字符不会被xml解析,所以不会报错。 -->
<exam>
<question><![CDATA[1+4<3是否正确?]]></question>
</exam>
有序的子元素
XML例子
<?xml version="1.0" encoding="UTF-8" ?>
<!--公司员工数据_XML例子-->
<hr>
<employee no="3309">
<name>张三</name>
<age>31</age>
<salary>4000</salary>
<department>
<dname>会计部</dname>
<address>XX大厦-B103</address>
</department>
</employee>
<employee no="3310">
<name>李四</name>
<age>23</age>
<salary>3000</salary>
<department>
<dname>工程部</dname>
<address>XX大厦-B104</address>
</department>
</employee>
</hr>
XML语义约束
规定xml文档中能出现哪些标签
XML语义约束有两种定义方式:DTD与XML Schema
Document Type Definition(DTD)
创建一个DTD文件
利用DTD中的<!ELEMENT>标签,我们可以定义XML文档中允许出现的节点及数量。
<!-- hr节点下只能出现1个employee子节点。 -->
<!ELEMENT hr (employee)>
<!-- employee节点下必须包含以下四个节点,且按顺序出现。 -->
<!ELEMENT employee (name,age,salary,department)>
<!-- hr节点下最少出现1个employee子节点。 -->
<!ELEMENT hr (employee+)>
<!-- 定义name标签体只能是文本,#PCDATA代表文本元素。-->
<!ELEMENT name (#PCDATA)>
<!-- hr节点下可出现0..n个employee子节点。 -->
<!ELEMENT hr (employee*)>
<!-- hr节点下最多出现1个employee子节点。 -->
<!ELEMENT hr (employee?)>
<!-- 在XML中使用<!DOCTYPE>标签来引用DTD文件 -->
<!-- <!DOCTYPE根节点SYSTEM "dtd文件路径"> -->
<!DOCTYPE hr SYSTEM "hr.dtd">
<!--employee 默认属性 no 值为空 -->
<!ATTLIST employee no CDATA "">
<!-- DTD文件例子 -->
<?xml version="1.0" encoding="UTF-8" ?>
<!ELEMENT hr (employee+)>
<!ELEMENT employee (name,age,salary,department)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT salary (#PCDATA)>
<!ELEMENT department (dname, address)>
<!ELEMENT dname (#PCDATA)>
<!ELEMENT address (#PCDATA)>
<!ATTLIST employee no CDATA "">
XML Schema
XML Schema比DTD复杂
XML Schema提供了数据类型、格式限定、数据范围等特性
XML Schema是W3C标准
<!-- XML文件导入Schema的方法 -->
<!-- 有命名空间 -->
<!-- XML文件 -->
<hr xmlns="http://www.testSchema.com/xml-schema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.testSchema.com/xml-schema hr.xsd">
<!-- Schema文件 -->
<!-- targetNamespace为命名空间,可随意填写,但必须是网站的格式 -->
<!-- elementFormDefault设为默认的Schema约束 -->
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.testSchema.com/xml-schema" elementFormDefault="qualified">
<!-- 没有命名空间 -->
<!-- XML文件 -->
<hr xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="hr.xsd">
<!-- Schema文件 -->
<schema xmlns="http://www.w3.org/2001/XMLSchema">
<!-- Schema文件例子 -->
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.testSchema.com/xml-schema" elementFormDefault="qualified">
<element name="hr">
<!-- 带有子标签的标签 -->
<complexType>
<!-- 标签必须按顺序排放 -->
<sequence>
<!-- 设置元素最小出现次数和最大出现次数。 -->
<element name="employee" minOccurs="1" maxOccurs="99999">
<complexType>
<sequence>
<element name="name" type="string"></element>
<element name="age">
<!-- 不带有子标签的标签 -->
<simpleType>
<!-- 限制标签元素的类类型 -->
<restriction base="integer">
<!-- 设置元素的上限值和下限值 -->
<minInclusive value="18"></minInclusive>
<maxInclusive value="65"></maxInclusive>
</restriction>
</simpleType>
</element>
<element name="salary" type="integer"></element>
<element name="department">
<complexType>
<sequence>
<element name="dname" type="string"></element>
<element name="address" type="string"></element>
</sequence>
</complexType>
</element>
</sequence>
<!-- 设置元素中的属性。 -->
<attribute name="no" type="integer" use="required"></attribute>
</complexType>
</element>
</sequence>
</complexType>
</element>
</schema>