XML文件基本知识

XML文件需要包括文档声明

文档声明是可选的 可写可不写 但一般都写 包括xml的版本version以及编码的方式encoding

XML目前的版本是1.0        encoding一般都会写UTF-8 

<?xml version="1.0" encoding="utf-8" ?>

需要以<? 开头 并以?>结尾

元素:元素是XML的重要组成成分

每一个XML都必须有一个根标签

标签必须有开始标签和结束标签 标签可以中间添加标签但是不能随便添加 明确层级关系

XML标签的命名规则区分大小写 不能带空格和冒号

<users>
    <user>
        <id>10001</id>
        <name>Jenny</name>
        <password>88888</password>
    </user>
    <user>
        <id>10002</id>
        <name>Jim</name>
        <password>99999</password>
    </user>
</users>

元素的属性

定义格式 : 属性名=属性值 属性值需要用“”包裹起来

多个属性名不能相同

<users>
    <user id="10001" country="CHINA" source="android">
        <id>10001</id>
        <name>Jenny</name>
        <password>88888</password>
    </user>
    <user id="10002" country="CHINA" source="ios">
        <id>10002</id>
        <name>Jim</name>
        <password>99999</password>
    </user>
</users>

 注释 :<!----> 

 转义字符:在XML中有些字符是无法识别的,此时需要XML的转义字符来表示

&使用&amp;表示   <使用&lt;表示

 <price> price >900 &amp; age&lt;18 </price>

 字符区:CDATA内部的所有内容都会被当作文本显示,可以解决有些无法识别的字符问题

IDEA中快捷键是CD然后回车

     <price><![CDATA[
        price>1800 & age<30
        ]]></price>
        

 XML的约束:由于XML的标签是没有预定义的 任何标签都能使用 这不利于解析 所以可以编写XML的约束文件来对XML进行约束

XML约束有两种类型

1.DTD约束(文件后缀名为.dtd)

2.Schema约束(文件后缀名为.xsd).xsd x代表XML s代表Schema d表示Definition

Schema约束比DTD约束更高级

XML约束可以约束的内容

1.约束XML标签的层级关系(根标签 子标签和子子标签等的关系)

2.约束标签

3.约束标签的属性值(属性名,属性类型,属性约束)

XML约束—DTD约束

数量词:+表示可以出现1-n次

*表示可以出现0-n次   

,(逗号)表示元素必须按照指定顺序出现

|表示从列表中选且只能选一个

1.约束标签的层级关系

定义根目录为users  下面有子目录user 而且子目录user必须至少出现一次

<!ELEMENT users (user+)>

定义user标签下必须有id name 和password标签 用逗号表示必须依次按顺序出现

<!ELEMENT user(id,name,password)>

 2.约束标签的属性值

<!ELEMENT 标签名称(标签类型)

标签名称和标签类型之间的空格不能省略

常见的标签类型

  • EMPTY空类型
  • ANY任意类型
  • #PCDATA字符串类型
<!--约束标签-->
<!--id name password必须字符串类型-->
<!ELEMENT id (#PCDATA)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT password (#PCDATA)>

 3.约束标签的属性

<!ATTLIST 标签名

       属性名 属性类型 属性约束

        属性名 属性类型 属性约束

        属性名 属性类型 属性约束

>

常见的属性类型

  • CDATA  字符串类型
  • ID表示在XML中是唯一的 而且不能以数字开头
  • ENUMERATED 表示标签是枚举类型 只能从枚举列表中选取其中一个

常见的属性约束

  • REQUIRED 表示该属性值必须存在        
  • IMPLED 表示该属性可有可无
  • FIXED表示该属性的固有值 语法为#FIXED “固定值”
<!--约束标签的属性-->
<!--user标签下的
id属性属性类型为ID类型 必须值 不能重复 不能以数字开头
country为字符类型 可有可无
platform为字符串类型 默认值为 Wechat
source为枚举类型 从Android IOS PC WeChat中选择一个 默认值为Android
-->
<!ATTLIST user
    id ID #REQUIRED
    country CDATA #IMPLIED
    platform CDATA #FIXED "Wechat"
    source (Android|IOS|PC|WeChat) "Android"
>

 DTD约束的使用

根据DTD位置的不同 可以分为三种使用方法

1.外部DTD-DTD在本地 DTD在本机上但是和XML不在同一文件中 但是DTD和XML通常是在同一个目录下

使用方法:

XML代码

<!--<!DOCTYPE 根目录 SYSTEM "DTD名称">-->
<!DOCTYPE users SYSTEM "User.dtd">

引入User.dtd约束

完整代码

XML

<?xml version="1.0" encoding="utf-8" ?>
<!--<!DOCTYPE 根目录 SYSTEM "DTD名称">-->
<!DOCTYPE users SYSTEM "User.dtd">
<users>
    <user id="T10001" country="CHINA" source="Android">
        <id>10001</id>
        <name>Jenny</name>
        <password>88888</password>
        <price> price >900 &amp; age&lt;18 </price>
    </user>
    <user id="T10002" country="CHINA" source="IOS">
        <id>10002</id>
        <name>Jim</name>
        <password>99999</password>
        <price><![CDATA[
        price>1800 & age<30
        ]]></price>
    </user>

</users>

DTD文件

<?xml version="1.0" encoding="UTF-8" ?>
<!--定义根目录为users 里面至少包含一个user子标签-->
<!ELEMENT users (user+)>
<!--
定义user标签中必须依次有id name password子标签
而且必须按照顺序
-->
<!ELEMENT user (id,name,password,price)>

<!--约束标签-->
<!--id name password必须字符串类型-->
<!ELEMENT id (#PCDATA)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT password (#PCDATA)>
<!ELEMENT price (#PCDATA)>

    <!--约束标签的属性-->
    <!--user标签下的
    id属性属性类型为ID类型 必须值 不能重复 不能以数字开头
    country为字符类型 可有可无
    platform为字符串类型 默认值为 Wechat
    source为枚举类型 从Android IOS PC WeChat中选择一个 默认值为Android
    -->
    <!ATTLIST user
        id ID #REQUIRED
        country CDATA #IMPLIED
        platform CDATA #FIXED "Wechat"
        source (Android|IOS|PC|WeChat) "Android"
    >

2.外部DTD-DTD在网络上

使用方法

<!DOCTYPE 根元素  PUBLIC "DTD约束文件名" “DTD约束的URL路径” >

 3.内部DTD XML和DTD约束在同一个XML文件中

使用方法:<!DOCTYPE 根元素  [元素约束] >

 XML完整代码

<?xml version="1.0" encoding="utf-8" ?>
<!--<!DOCTYPE 根目录 SYSTEM "DTD名称">-->
<!DOCTYPE users [
        <!ELEMENT users (user+)>
        <!ELEMENT user (id,name,password,price)>
        <!ELEMENT id (#PCDATA)>
        <!ELEMENT name (#PCDATA)>
        <!ELEMENT password (#PCDATA)>
        <!ELEMENT price (#PCDATA)>
        <!ATTLIST user
                id ID #REQUIRED
                country CDATA #IMPLIED
                platform CDATA #FIXED "Wechat"
                source (Android|IOS|PC|WeChat) "Android"
                >
        ]>
<users>
    <user id="T10001" country="CHINA" source="Android">
        <id>10001</id>
        <name>Jenny</name>
        <password>88888</password>
        <price> price >900 &amp; age&lt;18 </price>
    </user>
    <user id="T10002" country="CHINA" source="IOS">
        <id>10002</id>
        <name>Jim</name>
        <password>99999</password>
        <price><![CDATA[
        price>1800 & age<30
        ]]></price>
    </user>

</users>

 Schema的创建

Orders.XML代码如下

<?xml version="1.0" encoding="UTF-8" ?>

<orders>
    <order OrderID="10001">
        <id>10001</id>
        <address>河北省保定市</address>
        <BookTime>2019-01-01</BookTime>
        <amount>88.8</amount>
    </order>

    <order OrderID="10002">
        <id>10002</id>
        <address>河北省唐山市</address>
        <BookTime>2020-01-01</BookTime>
        <amount>66.6</amount>
    </order>

    <order OrderID="10003">
        <id>10003</id>
        <address>河北省石家庄市</address>
        <BookTime>2021-01-01</BookTime>
        <amount>520</amount>
    </order>
</orders>

Order.xsd代码如下

<?xml version="1.0" encoding="UTF-8"?>

<xs:schema
        xmlns:xs="http://www.w3.org/2001/XMLSchema"
    targetNamespace="http://www.example.org/Order" xmlns:tns="http://www.example.org/Order"
    elementFormDefault="qualified">

<!--orders是order的根元素-->
    <xs:element name="orders">
<!--表明orders是包含根元素的复杂元素-->
        <xs:complexType>
<!--
    sequence: 表示元素是顺序的,即子元素必须按照顺序出现
    maxOccurs: 表示元素可以出现多次,默认为1
    minOccurs: 表示元素至少出现的次数,默认为1
-->
            <xs:sequence>
<!--                order下的子标签是order
-->
                <xs:element name="order" maxOccurs="3" minOccurs="1">
<!--                 表示order是复杂的标签-->
                    <xs:complexType>
<!--                        order中包含按照顺序出现的以下标签-->
                        <xs:sequence>
                            <xs:element name="id" type="xs:unsignedInt"></xs:element>
                            <xs:element name="address" type="xs:string"></xs:element>
                            <xs:element name="BookTime" type="xs:dateTime"></xs:element>
                            <xs:element name="amount" type="xs:double"></xs:element>
                        </xs:sequence>

<!--                        标签的属性 类型为无符号的整形 required必须声明-->
                        <xs:attribute name="OrderID" type="xs:unsignedInt" use="required"></xs:attribute>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

<!--
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"  表示标准命名空间每个Schema约束都会有一个标准命名空间
targetNamespace="http://www.example.org/Order" xmlns:tns="http://www.example.org/Order"  表示目标命名空间
elementFormDefault="qualified">
</xs:schema>-->

 Schema的使用 在根标签下声明xmlns 即xml的命名空间即可使用 指向xsd的目标命名空间

代码如下

<?xml version="1.0" encoding="UTF-8" ?>

<orders xmlns="http://www.example.org/Order">
    <order OrderID="10001">
        <id>10001</id>
        <address>河北省保定市</address>
        <BookTime>2019-01-01T00:00:00</BookTime>
        <amount>88.8</amount>
    </order>

    <order OrderID="10002">
        <id>10002</id>
        <address>河北省唐山市</address>
        <BookTime>2020-01-01T00:00:00</BookTime>
        <amount>66.6</amount>
    </order>

    <order OrderID="10003">
        <id>10003</id>
        <address>河北省石家庄市</address>
        <BookTime>2021-01-01T00:00:00</BookTime>
        <amount>520</amount>
    </order>
</orders>
<?xml version="1.0" encoding="UTF-8"?>

<xs:schema
        xmlns:xs="http://www.w3.org/2001/XMLSchema"
    targetNamespace="http://www.example.org/Order" xmlns:tns="http://www.example.org/Order"
    elementFormDefault="qualified">

<!--orders是order的根元素-->
    <xs:element name="orders">
<!--表明orders是包含根元素的复杂元素-->
        <xs:complexType>
<!--
    sequence: 表示元素是顺序的,即子元素必须按照顺序出现
    maxOccurs: 表示元素可以出现多次,默认为1
    minOccurs: 表示元素至少出现的次数,默认为1
-->
            <xs:sequence>
<!--                order下的子标签是order
-->
                <xs:element name="order" maxOccurs="3" minOccurs="1">
<!--                 表示order是复杂的标签-->
                    <xs:complexType>
<!--                        order中包含按照顺序出现的以下标签-->
                        <xs:sequence>
                            <xs:element name="id" type="xs:unsignedInt"></xs:element>
                            <xs:element name="address" type="xs:string"></xs:element>
                            <xs:element name="BookTime" type="xs:dateTime"></xs:element>
                            <xs:element name="amount" type="xs:double"></xs:element>
                        </xs:sequence>

<!--                        标签的属性 类型为无符号的整形 required必须声明-->
                        <xs:attribute name="OrderID" type="xs:unsignedInt" use="required"></xs:attribute>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

<!--
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"  表示标准命名空间每个Schema约束都会有一个标准命名空间
targetNamespace="http://www.example.org/Order" xmlns:tns="http://www.example.org/Order"  表示目标命名空间
elementFormDefault="qualified">
</xs:schema>-->

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值