【发布时间】:2012-09-07 22:37:49
【问题描述】:
据我所知,XML 支持命名空间来解决不同规范中元素名称之间的冲突。
问题 1:HMTL 是否支持命名空间?
问题 2:从树结构上看,命名空间如何影响 DOM 树的构建?
一个简单的例子是最好的。
【问题讨论】:
标签: xml html dom xml-parsing
据我所知,XML 支持命名空间来解决不同规范中元素名称之间的冲突。
问题 1:HMTL 是否支持命名空间?
问题 2:从树结构上看,命名空间如何影响 DOM 树的构建?
一个简单的例子是最好的。
【问题讨论】:
标签: xml html dom xml-parsing
以下适用于 HTML5 解析。它不一定适用于传统的独立 HTML 解析器。
问题 1:HTML 是否支持命名空间?
在 text/html 语法中,您无法控制。解析器将元素添加到 DOM 时,根据它们的名称和祖先元素将元素放置在不同的命名空间中。
您可以使用 document.createElementNS 控制通过 javascript 添加的新元素的命名空间。
命名空间可以在 application/xhtml+xml 语法中使用,但没有新的符合 HTML5 的元素可用,而不是 text/html 语法中不可用。
问题 2:命名空间如何影响 DOM 树的构建?一个简单的例子是最好的。
在 text/html 语法中
<div>
<svg>
<script ...></script>
</svg>
<script ...></script>
</div>
div 元素已知是一个 HTML 元素,因此它被放置在 http://www.w3.org/1999/xhtml 命名空间中。
svg 元素是已知的 SVG 元素,因此被放置在 http://www.w3.org/2000/svg 命名空间中。
第一个script 元素在svg 元素内,因此它被放置在http://www.w3.org/2000/svg 命名空间中。
第二个script 元素不在任何特殊元素内,因此它被放置在http://www.w3.org/1999/xhtml 命名空间中
在 SVG 或 MathML 命名空间中解析为元素的标签可以以 XML 的方式对所有此类元素使用自闭合语法。自闭合语法对形成 HTML 命名空间元素的标签没有影响。使用/> 结束void HTML 元素的标签是允许的,但与使用> 结束标签没有区别。
【讨论】: