HTML中有某些标记可以自动关闭而不会产生干扰。例如:
<link rel="shortcut icon" href="//www.google.com/favicon.ico">
有效。因此,这是不需要的:
<link rel="shortcut icon" href="//www.google.com/favicon.ico"/>
或
<link rel="shortcut icon" href="//www.google.com/favicon.ico">foo</link>
有了这些不需要扎线的指定标签,假设我碰到了
<link rel="shortcut icon" href="//www.google.com/favicon.ico">
我可以假设不存在相应的</link>
,还是我需要解析文档的其余部分并自己确定?
答案 0 :(得分:2)
我知道HTML specification是一个非常吓人的文档。但是我认为,只要有任何相关的链接,它至少可以帮助您阅读overview about elements。
特别是,您会在那里看到<link>
是void element,该部分对此表示:
无效元素只有一个开始标签;不得为void元素指定结束标签。
因此,第二个示例实际上是欺骗性的,其中文本foo
似乎是元素的内容。在遇到文本之前,该元素已经关闭,因此文本是父元素的内容(如果可能的话)。显式结束标记是一个错误,应该忽略。
尽管void元素在HTML5中不需要自动关闭,但在XHTML中确实需要将其自动关闭,因此常见的是<…/>
语法。
注意: (以下内容是在我认为需要精确的HTML解析器时写的。尽管看起来有些许,但我还是将其保留在原位。激进的,因为我认为它确实为那些(试图)编写HTML解析器的人提供了一些一般性建议。)
我知道所引用的标准是一个庞大的文档,有时会造成混淆,并且总是很复杂。这使得编写HTML解析器成为一个挑战。但是没有捷径。如果要编写兼容的解析器,则必须阅读标准。如果您不太在乎合规性,那么您就不应该问什么结构合规(但是您将无权抱怨产生不合规HTML的内容创建者)。
开源解析器也作为库存在,因此没有必要编写新的解析器。另一方面,除了编写解析器之外,没有什么比教给您更多有关该任务的知识了,我尊重任何愿意这样做的人。我不认为这是我现在要承担的项目。如果要这样做,请先阅读标准。另外,请考虑加入相关的邮件列表或至少遵循某些讨论。祝你好运!
P.S。:另一个有用的资源是Mozilla开发人员网络(MDN)文档,该文档从WHATWG文档链接。例如,请参见其<link>
element上的章节,尤其是技术规范部分。