数据格式之XML入门

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>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值