我正在使用网页将内容从XML翻译为HTML,然后将其显示在HTML模板页面上。我有一个页面,其中一些元素在模板中定义错位。我唯一能想到的是XML被错误地翻译了。现在我的问题是,如果它被错误地翻译并且缺少标签(例如缺少</div>
标签),浏览器会自动插入必要的标签吗?
我只是不明白我的模板页面上的某个元素如何处于错误的位置,除非浏览器正在做一些我不知道的事情......
答案 0 :(得分:1)
大多数情况下,未关闭的标签会自动关闭 - 但每个浏览器会以不同的方式处理未关闭的标签。它不仅取决于您的浏览器,还取决于doctype规范。
我相信大多数网络浏览器都会尝试优雅地失败(除非您使用 一个严格的DTD),问题是规范不能定义如何 渲染无效内容
您可以在此处找到有关无效标记的浏览器解释的更多信息: http://www.w3.org/wiki/Validating_your_HTML#Different_browsers_interpret_invalid_HTML_differently
根据W3C:指定您的doctype以及使用验证器有助于查找违规标签:http://www.w3.org/TR/WCAG20-TECHS/H74.html
这是W3C.H74的一个例子:
示例1:HTML
HTML页面包含文档类型声明(有时称为 as!DOCTYPE声明)。开发人员可以离线或在线使用 验证器(请参阅下面的参考资料)检查所有id属性值 是独一无二的,并根据使用开关标签 说明书
注意:标签需要关闭元素的规范有 随着HTML5的推出而改变。
示例2:XHTML
与其他基于XML的文档一样,XHTML文档引用了一个 文档类型定义(DTD)或其他类型的XML架构。该 开发人员可以使用在线或离线验证器(包括验证 内置到编辑器中的工具)来检查打开和关闭标签是什么 根据规范使用。
示例3:使用测试框架
当网站动态生成HTML或XHTML而非提供服务时 只有静态页面,开发人员可以使用XHTMLUnit,XML Test Suite或者 用于测试生成的XHTML代码的类似框架。
W3C提供了测试html的资源:http://www.w3.org/TR/WCAG20-TECHS/H74.html
网络上有许多HTML验证器,但正确指定doctype以充分利用它们非常重要。以下是另一个可以帮助您的资源列表:http://www.w3.org/wiki/Validating_your_HTML
答案 1 :(得分:0)
他们都这样做。例如,检查http://blog.fefe.de/的来源以查看由任何现代浏览器完成的最小变体。如果您使用浏览器开发人员工具,它将显示所有缺少的标记。
一个常见示例是每个浏览器都将tbody
元素添加到缺少一个的表中。以下是:
<table>
<tr>
<td></td>
<td></td>
<td></td>
</tr>
</table>
将变为:
<table>
<tbody>
<tr>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
答案 2 :(得分:0)
缺少标签的处理方式因标签而异。当HTML规范允许结束标记遗漏时,例如对于</p>
和</td>
,所有浏览器都暗示它们,甚至要求它们这样做。 无效结束标记遗漏的情况有所不同。例如,</div>
可能永远不会被省略。浏览器实际上做的是它们意味着文档正文末尾的结束</div>
。这通常意味着div
元素被解释为包含比预期更多的元素,如果存在格式化元素的样式表(或处理它的脚本),这可能会产生严重影响。对于像em
这样的文本级元素,处理更复杂:当遇到封闭块元素的末尾时隐含了结束标记但文本级元素再次打开开始下一个街区!这是描述的,其他专业在HTML5规范的第8.2.8节An introduction to error handling and strange cases in the parser中介绍。
所有这些都适用于HTML语法。当使用XHTML语法和时,已指示浏览器将数据处理为XML内容类型(例如application / xhtml + xml),不允许结束标记省略:第一个省略的结束标记,即良好的违规行为被视为致命错误。这意味着文档内容根本不显示;将向用户显示错误消息。这在网页上是非常罕见的情况,因为很少有充分的理由使用“真正的XHTML”(即由XML规则处理的XHTML)。
结论是,您应该生成有效的HTML,并且至少在某些测试中使用合适的验证器http://validator.w3.org验证它。