XML文档结构(https://www.runoob.com/xml/xml-syntax.html)
- 第一行必须是xml声明 :<?xml version="1.0" encoding="UTF-8"?> , 定义 XML 的版本(1.0)和所使用的编码(UTF-8 : 万国码, 可显示各种语言)。
- 有且只有一个根节点。
- xml标签的书写规则与HTML相同。
- 标签名使用英文小写,单词之间用“-”分隔:<shop-cart>购物车</shop-cart>
- 把字符 "<" 放在 XML 元素中,会发生错误,如:message>if salary < 1000 then</message>,解决办法1,实体引用。2,CDATA标签:CDATA 部分由 "<![CDATA[" 开始,由 "]]>" 结束。
- xml多层嵌套中的子元素中,标签前后顺序要保持一致。
例子:
hr.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hr SYSTEM "hr.dtd">
<!-- 注释,人力资源管理系统 -->
<hr>
<employee no="001">
<name>李白</name>
<age>21</age>
<salery>5000</salery>
<department>
<dname>开发部</dname>
<address>北京</address>
</department>
</employee>
<employee no="002">
<name>杜甫</name>
<age>23</age>
<salery>7000</salery>
<department>
<dname>市场部</dname>
<address>广州</address>
</department>
</employee>
</hr>
xml语义约束:DTD和xml Schema
DTD 的目的是定义 XML 文档的结构:https://www.runoob.com/dtd/dtd-intro.html
1,使.xml和对应.dtd文件绑定:
<!DOCTYPE hr SYSTEM "hr.dtd">
hr.dtd
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT hr (employee+)>
<!ELEMENT employee (name,age,salery,department)>
<!ATTLIST employee no CDATA "">
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT salery (#PCDATA)>
<!ELEMENT department (dname,address)>
<!ELEMENT dname (#PCDATA)>
<!ELEMENT address (#PCDATA)>
xml Schema
绑定:
<hr xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="hr.xsd">
Schema文件:hr.xsd
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema">
<element name="hr">
<!--complexType标签的含义是复杂节点,包含子节点是必须使用这个标签 -->
<complexType>
<sequence>
<element name="employee" minOccurs="1" maxOccurs="9999">
<complexType>
<sequence>
<element name="name" type="string"></element>
<element name="age" >
<simpleType>
<restriction base="integer">
<minInclusive value="18"></minInclusive>
<maxInclusive value="60"></maxInclusive>
</restriction>
</simpleType>
</element>
<element name="salery" type="string"></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="string" use="required"></attribute>
</complexType>
</element>
</sequence>
</complexType>
</element>
</schema>