HTML 和 XHTML 有什么区别?
有很多差异。主要的一点是XHTML是XML文档中的HTML,而XML有不同的语法规则:
- 默认情况下,XML 有不同的命名空间,因此您必须使用 HTML 命名空间,
xmlns="http://www.w3.org/1999/xhtml"
明确地在 XHTML 文档中
- XML 区分大小写,您必须使用小写的标签名称和属性,甚至
x
在十六进制字符引用中
- XML 没有可选的开始和结束标记,因此您必须完整地写出所有标记
- 同样,XML 没有 void 标签,因此您必须自己用斜杠关闭每个 void 元素。
- 没有内容的非 void 元素可以写为 XML 中的单个空元素标记。
- XML 可以包含 CDATA 部分、用以下分隔的纯文本部分
<![CDATA[
.. ]]>
; HTML 不能
- 另一方面,XML 中没有 CDATA 或 PCDATA 元素或属性,因此您必须转义您的
<
到处都有标志(CDATA 部分除外)
- XML 中属性值周围的引号不是可选的,并且不存在属性最小化(仅名称属性)
- XML 解析器不像 HTML 解析器那样能够容忍错误。
还有一些与 XML 无关的差异:
- XHTML 文档始终以标准模式呈现,从不以怪异模式呈现
- XHTML 不查看头部中的元命令来确定编码。事实上,W3C 验证器标志
<meta http-equiv="content-type" ...
在 XHTML5 文件中会出现错误,但在 HTML5 文件中不会出现错误。
- 早些时候,XHTML 1.0 strict 和 HTML 4.01 strict 的 dtd 之间的不匹配会导致验证问题。 XTHML 1.0 的定义缺少
name
属性上<img>
and <form>
。但这是一个错误,已在 XHTML 1.1 中修复。
请注意,XHTML 文档应以正确的文件类型提供,即.xhtml文件扩展名或应用程序/xhtml+xmlMIME 类型。 HTML 文档中不可能真正包含 XHTML,因为浏览器不会通过查看内容来区分这两种语法,而只能通过文件类型来区分。
换句话说,如果您有一个 HTML 文件,那么它的内容就是 HTML,无论其中是否包含有效的 XML。
关于语法规则值得一提的一点是标签名称的大小写。尽管 HTML 文档不区分大小写,但 DOM 实际上将标签名称公开为大写。这意味着在 HTML 下,像这样的 JavaScript 命令console.log(document.body.tagName);
将输出“BODY”,而 XHTML 下的相同命令将输出“body”。
XHTML 不是 HTML 的更严格版本吗?
不; XML 的规则与 HTML 不同,但不一定更严格。如果说有什么不同的话,那就是 XML 的规则更少!
在 HTML 中,许多功能是可选的。您可以选择是否在属性值周围加引号;在 XML 中你没有这样的选择。在 HTML 中,您必须记住何时可以选择,何时没有:引号是可选的<a href=http://my-website.com/?login=true>
?在 XML 中,您不必考虑这一点。 XML 更容易。
在 HTML 中,一些元素被定义为raw text元素,即包含纯文本而不是标记的元素。
其他一些元素是可转义的原始文本元素,其中引用如下é
将被解析,但类似的事情<b>bold</b>
and <!-- comment -->
将被视为纯文本。如果你能记住那些元素,你就不必逃避<
标志(但您可以选择)。 XML 不具备这一点,因此无需记住任何内容,并且所有元素都具有相同的内容类型。
XML has 处理器指令,其中最著名的是prolog中的xml声明,<?xml version="1.0" encoding="windows-1252"?>
。这告诉浏览器使用哪个版本的 XML(顺便说一句,1.0 是唯一可用的版本)以及哪个字符集。
XML 以不同的方式解析注释。例如,HTML 注释不能以<!-->
(有一个>
作为里面的第一个字符); XHTML 注释可以。
说到注释,使用 XHTML 您可以注释掉里面的代码块<script>
and <style>
元素使用<!-- comment -->
。不要在 HTML 中尝试这样做。 (由于兼容性问题,在 XHTML 中也不推荐这样做,但您可以。)
如果 XHTML 的行为都相同,为什么会有不同版本呢?
他们不!例如,在 XHTML 1.1 中,您可以引用字符实体,例如é
and
,因为这些实体是在 DTD 中定义的。当前版本的 XHTML(以前称为 XHTML5)没有 DTD,因此在本例中您必须使用数字引用é
and  
(或者,在 DOCTYPE 声明中自己定义这些实体。毕竟 X 意味着可扩展)。