结束标记内的XML / HTML标记名称是否真的必要?

时间:2011-07-22 03:25:50

标签: xml tags language-design

这实际上不是一个编程问题本身,但我想知道为什么在XML的结束标记中需要标记的名称。例如,不能

<a>
    <b>stuff</b>
</a>

写的

<a>
    <b>stuff</>
</>

这样每个结束标记</>只是终止了最后打开的标记吗?

所以我的问题是

  1. 这是否有效(即是否有任何我不会想到的不明确/失败的角落情况)?
  2. 如果它能起作用,为什么不'他们'那样设计呢?

2 个答案:

答案 0 :(得分:5)

  

如果它能起作用,为什么不“他们”那样设计呢?

一个原因是SGML / XML也被设计为人类可读的。您的/a/b示例是可读的,但更复杂的结构将是尝试解释的噩梦。

对于混合内容(PCDATA和元素结构混合)尤其如此。

答案 1 :(得分:2)

它可以工作,但调试嵌套问题会很糟糕。例如:

<one><two><nine></><ten></><eight><three></><four>
<five></><six></></>
<seven></>To what element does this text belong?</></></>

如果你确保XML有适当的缩进,嵌套问题不是问题(下面是相同的代码和正确的缩进。但是因为缩进是无关紧要的,我们需要另一种机制来保持XML人类可读。这个例子,人类可读意味着人类可以很容易地看到哪个内容属于哪个元素。解决方案是命名每个结束标记所指的元素。

<one>
<two>
    <nine>
    </nine>
    <ten>
    </ten>
    <eight>
        <three>
        </>
        <four>
            <five>
            </>
            <six>
            </>
        </>
        <seven>
        </>
        To what element does this text belong?
    </>
</>
</>

当我们给出结束标记名称时,即使在不正确​​的缩进XML中也可以看到文本属于元素<eight>

<one><two><nine></nine><ten></ten><eight><three></three><four>
<five></five><six></six></four><seven>
</seven>To what element does this text belong?</eight></two></one>