根据XML规范,这是一个空元素的定义:



(请参阅:http://www.w3.org/TR/REC-xml/#NT-content)

现在,我对理解空元素标签<i-am-empty/>毫无疑问,不会产生任何误解。但是在我看来,在另一种情况下,该标准与自身矛盾:一方面,它说没有content的任何标签都是空的;另一方面,它说可以由一个开始标签表示,然后立即由一个结束符表示。 -标签。但是,如果我们看看content的定义:

[43] content ::= CharData? ((element | Reference | CDSect | PI | Comment) CharData?)*

在我看来,content由两个可选部分组成,CharData?和一个组()*。但是,由于这两个部分都是可选的,因此这意味着没有任何内容(例如缺少字符)与此产品匹配。因此,如果我尝试将内容的定义与<am-i-empty-or-not></am-i-empty-or-not>中的内容进行匹配,我将获得肯定的匹配。因此,一方面,这是一个空标签,因为它是“开始标签,紧接着是结束标签”;另一方面,它也不是空的,因为在标签之间,我可以肯定地匹配生产规则的定义[ 43]的内容,在这种情况下它包含内容,这意味着它不能为空。

谁能解释什么规则优先?有人知道对此有不同意见的任何DOM或解析器实现吗?

最佳答案



可能是正确的,但是规范中有关此问题的措词非常明确。下一段甚至还有空元素的示例。

<IMG align="left"
 src="http://www.w3.org/Icons/WWW/w3c_home" />
<br></br>
<br/>

因此,唯一的方式(在这种情况下,加上周围的措辞和示例)



将包括“(在匹配产品时)完全为空的内容”(即长度为零,甚至没有空格)。

关于xml - 什么是空元素?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2279501/

10-12 07:13