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不管属性值是不是数值,反正必须加引号!!!
来源:CSDN
作者:进阶的JFarmer
链接:https://blog.csdn.net/weixin_43896318/article/details/104585656