为何HTML、XML等标记语言的闭合标签必须指定标签名?
你提到的省略标签名用</>的写法,逻辑上确实能传递相同的结构信息,但XML/HTML的设计之所以要求闭合标签带名字,主要有这些实际考量:
解析容错与错误定位
现实里不管是人工编写还是机器生成标记,都难免出现嵌套失误。比如写错成<A><B></A></B>,带标签名的闭合方式能让解析器立刻识别出<B>未正确闭合、<A>提前闭合的问题,给出明确的错误提示。如果全用</>,解析器只能按顺序匹配,一旦嵌套出错,整个文档结构会直接混乱,还根本没法定位错误位置,调试成本会高到离谱。可读性与团队维护性
虽然你觉得10%的数据量换可读性不值,但绝大多数XML/HTML文档是需要人类阅读、修改和维护的。比如多层嵌套的结构:<div class="container"> <div class="header"> <h1>页面标题</h1> </div> <div class="content"> <p>正文内容</p> </div> </div>如果换成
</>的写法:<div class="container"> <div class="header"> <h1>页面标题</> </> <div class="content"> <p>正文内容</> </> </>嵌套越深,越难判断每个
</>对应的是哪个标签,团队协作时很容易改错,维护成本会直线上升。历史设计的延续性
XML脱胎于SGML(标准通用标记语言),而SGML本身就要求闭合标签必须带名称。XML作为SGML的简化子集,延续了这个规则,这样早期基于SGML的解析工具、生态能直接兼容XML,避免了大规模重构的成本。混合内容场景的语义明确性
在HTML这类包含文本与标签混合的场景中,闭合标签名的作用更关键。比如<p>这是<b>加粗</b>的文字</p>,如果换成<p>这是<b>加粗</></>,你很难一眼判断第二个</>是闭合<p>还是<b>,语义直观性完全丧失。平衡机器效率与人类需求
XML/HTML的定位是半结构化标记语言,既要让机器高效解析,也要让人类能轻松理解。虽然省略标签名能减少数据量,但牺牲的可读性和可维护性在实际生产场景中代价更大。如果追求极致的传输效率,完全可以用二进制格式(比如Protocol Buffers),而XML/HTML从设计之初就没把极致压缩作为首要目标。
内容的提问来源于stack exchange,提问作者Timm Nicolaizik

