XML语法格式提要

不想你离开。 提交于 2020-03-01 11:46:58

XML语法规则纲要

  • XML文档必须有且只有一个根元素
  • XML元素都必须有一个关闭标签
  • XML标签对大小写敏感
  • XML元素必须被正确的嵌套
  • XML属性值必须加引号

XML文档必须有且只有一个根元素

对于下面的XML文档

<?xml version="1.0" encoding="UTF-8" ?>
<SALES>
    <ORDER>
        <ORDERITEM>
            <PRODUCT>
                <CODE>A001</CODE>
                <DESCRIPTION>Almond Flavored Syrup</DESCRIPTION>
                <PRICE>9.0</PRICE>
            </PRODUCT>
            <QUANTITY>3</QUANTITY>
        </ORDERITEM>
        <ORDERITEM>
            <PRODUCT>
                <CODE>A002</CODE>
                <DESCRIPTION>Irish Creme Flavored Syrup</DESCRIPTION>
                <PRICE>9.0</PRICE>
            </PRODUCT>
            <QUANTITY>5</QUANTITY>
        </ORDERITEM>
    </ORDER>
    <ORDER>
        <ORDERITEM>
            <PRODUCT>
                <CODE>A001</CODE>
                <DESCRIPTION>Almond Flavored Syrup</DESCRIPTION>
                <PRICE>9.0</PRICE>
            </PRODUCT>
            <QUANTITY>1</QUANTITY>
        </ORDERITEM>
        <ORDERITEM>
            <PRODUCT>
                <CODE>A004</CODE>
                <DESCRIPTION>Caramel Flavored Syrup</DESCRIPTION>
                <PRICE>9.0</PRICE>
            </PRODUCT>
            <QUANTITY>2</QUANTITY>
        </ORDERITEM>
        <ORDERITEM>
            <PRODUCT>
                <CODE>A006</CODE>
                <DESCRIPTION>Gourmet Coffee Travel Thermo</DESCRIPTION>
                <PRICE>18.0</PRICE>
            </PRODUCT>
            <QUANTITY>3</QUANTITY>
        </ORDERITEM>
    </ORDER>
    <ORDER>
        <ORDERITEM>
            <PRODUCT>
                <CODE>A009</CODE>
                <DESCRIPTION>Gourmet Coffee 36 Cup Filters</DESCRIPTION>
                <PRICE>45.0</PRICE>
            </PRODUCT>
            <QUANTITY>100</QUANTITY>
        </ORDERITEM>
    </ORDER>
</SALES>

删去根元素<SALES>:

<?xml version="1.0" encoding="UTF-8" ?>
<ORDER>
    <ORDERITEM>
        <PRODUCT>
            <CODE>A001</CODE>
            <DESCRIPTION>Almond Flavored Syrup</DESCRIPTION>
            <PRICE>9.0</PRICE>
        </PRODUCT>
        <QUANTITY>3</QUANTITY>
    </ORDERITEM>
    <ORDERITEM>
        <PRODUCT>
            <CODE>A002</CODE>
            <DESCRIPTION>Irish Creme Flavored Syrup</DESCRIPTION>
            <PRICE>9.0</PRICE>
        </PRODUCT>
        <QUANTITY>5</QUANTITY>
    </ORDERITEM>
</ORDER>
<ORDER>
    <ORDERITEM>
        <PRODUCT>
            <CODE>A001</CODE>
            <DESCRIPTION>Almond Flavored Syrup</DESCRIPTION>
            <PRICE>9.0</PRICE>
        </PRODUCT>
        <QUANTITY>1</QUANTITY>
    </ORDERITEM>
    <ORDERITEM>
        <PRODUCT>
            <CODE>A004</CODE>
            <DESCRIPTION>Caramel Flavored Syrup</DESCRIPTION>
            <PRICE>9.0</PRICE>
        </PRODUCT>
        <QUANTITY>2</QUANTITY>
    </ORDERITEM>
    <ORDERITEM>
        <PRODUCT>
            <CODE>A006</CODE>
            <DESCRIPTION>Gourmet Coffee Travel Thermo</DESCRIPTION>
            <PRICE>18.0</PRICE>
        </PRODUCT>
        <QUANTITY>3</QUANTITY>
    </ORDERITEM>
</ORDER>
<ORDER>
   <ORDERITEM>
        <PRODUCT>
            <CODE>A009</CODE>
            <DESCRIPTION>Gourmet Coffee 36 Cup Filters</DESCRIPTION>
            <PRICE>45.0</PRICE>
        </PRODUCT>
        <QUANTITY>100</QUANTITY>
    </ORDERITEM>
</ORDER>

就会解析错误:
在这里插入图片描述

错因在第20行的<ORDER>上,也就是说,新的XML文档在被浏览器解析的时候默认了<ORDER>是根元素,而第一次<\ORDER>出现的时候,意味着整个XML文档的结束,后面仍有<ORDER>就不合法,XML文档树可不是森林,必须单根。

XML元素都必须有一个关闭标签

这个关闭标签啊,在HTML中经常有不写关闭标签的情况而并不会解析错误。
即使是HTML5,也被迫向某些陋习妥协了,比如<p>等等

但是XML语法要求严格,标签必须被关闭。

如果我们删去上面代码最后一行的<\SALES>,就会解析错误:
在这里插入图片描述
在这里插入图片描述

当然了,我们这时以根元素举的例子,错误原因来自于文档解析到结尾仍没出现根元素<SALES>的关闭标签<\SALES>,这是不被允许的。

事实上,任何XML元素都是如此。

XML标签对大小写敏感

一般的编程语言都对大小写敏感,像 Visual Basic 系列这种不管大小写的真是奇葩……

XML虽不是编程语言,但也对大小写敏感。

怎么说敏感呢?
就是说<SALES>与<sales>是完全不同的标签。

我们将上面代码的最后一行的<\SALES>换成<\sales>:
在这里插入图片描述

显示解析错误:
在这里插入图片描述

再换成<HHH>,看看解析情况:
在这里插入图片描述
在这里插入图片描述

都是“非配对的标签”,其实人家都没管你是不是大小写问题,直接就是认为反正你不是<\SALES>就是不对。

所以要注意大小写啊!!!

XML元素必须被正确的嵌套

这个问题是说,比如我们<SALES>嵌套了<ORDER>,收尾顺序就得是先<\ORDER>后<\SALES>,有栈的意味。

如果胆敢出现FIFO队列式的先<\SALES>后<\ORDER>,就算嵌套错误,导致解析错误。

XML属性值必须加引号

有关属性的问题我在这篇文章中已经讲过很详细了,就不再细说。

必须注意的一点是:XML属性值必须加引号。

XML属性其实换成JSON显得更直白,就和Python的字典一个样子,key:value式的KV对,只不过这个value不管是什么值,都必须加引号,就比如下面的例子:

<PRODUCT id="202003010001">

不能写成下面的样子:

<PRODUCT id=202003010001>

XML不管属性值是不是数值,反正必须加引号!!!

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!