HTML和XHTML有什么区别?

时间:2019-05-22 18:19:59

标签: html xhtml

注意:这应该是该问题的规范文章。已经存在许多答案,但是对各种差异的描述散布在各地,而且通常还会对“我应该使用哪个”提供意见,在此我将不再赘述。
如果您有更多问题要问,或者您知道更多不同之处,请随时进行编辑。

XHTML和HTML有什么区别? XHTML不仅仅是HTML的更严格版本吗?如果XHTML的行为相同,又为什么会有不同的版本?

1 个答案:

答案 0 :(得分:2)

  

HTML和XHTML有什么区别?

有很多区别。主要的一个是XHTML是XML文档中的HTML,而XML具有不同的语法规则:

  • 默认情况下,XML具有不同的名称空间,因此您必须在XHTML文档中显式使用HTML名称空间xmlns="http://www.w3.org/1999/xhtml"
  • XML区分大小写,标记名称和属性,甚至十六进制字符引用中的x都必须使用小写字母
  • XML没有可选的开始和结束标签,因此您必须全部写出所有标签
  • 同样,XML没有void标签,因此您必须自己用斜杠关闭每个void元素。
  • 可以将没有内容的非空元素写为XML中的单个空元素标记。
  • XML中没有CDATA或PCDATA元素或属性,因此您必须在所有地方(除了CDATA部分中)转义<符号
  • XML没有仅名称属性,属性周围的引号不是可选的
  • XML可以包含CDATA部分,即以;分隔的纯文本部分; HTML不能。
  • XML解析器不像HTML解析器那样宽容错误

然后有一些与XML不相关的差异:

  • XHTML不会在头部查看元命令来确定编码
  • XHTML文档始终以标准模式呈现,而不是怪癖模式。

请注意,XHTML文档应使用正确的文件类型提供,即 .xhtml 文件扩展名或 application / xhtml + xml MIME类型。您实际上不能在HTML文档中使用XHTML,因为浏览器不会仅通过文件类型查看内容来区分两种语法。
换句话说,如果您具有HTML文件,则无论其是否具有有效的XML,其内容均为HTML。

值得一提的语法规则要点是标签名称的大小写。尽管HTML文档不区分大小写,但标记名称实际上由DOM公开为大写。这意味着在HTML下,像console.log(document.body.tagName);这样的JavaScript命令将输出“ BODY”,而在XHTML下,相同的命令将输出“ body”。

  

XHTML不仅仅是HTML的严格版本吗?

否; XML与HTML有不同的规则,但不一定严格。如果有的话,XML的规则会更少!

在HTML中,许多功能是可选的。您可以选择是否在属性值两边加上引号。在XML中,您别无选择。在HTML中,您必须记住何时可以选择,何时不选择:<a href=http://my-website.com/?login=true>中的引号是否可选?在XML中,您不必考虑这一点。 XML更容易。

在HTML中,某些元素定义为原始文本元素,即包含纯文本而不是标记的元素。
还有一些其他元素是可转义的原始文本元素,其中将解析诸如&#233;之类的引用,但将诸如<b>bold</b><!-- comment -->之类的内容视为纯文本。如果您记得那些是哪些元素,则不必转义<的符号(尽管可以选择)。 XML不具备此功能,因此无需记住任何内容,并且所有元素都具有相同的内容类型。

XML具有处理器指令,其中最著名的是序言<?xml version="1.0" encoding="windows-1252"?>中的xml声明。告诉浏览器使用哪个XML版本(顺便说一下,1.0是唯一可用的版本)以及哪个字符集。

XML以不同的方式解析注释。例如,HTML注释不能以<!-->开头(即以>作为其中的第一个字符); XHTML注释可以。

  

如果它们的行为相同,为什么会有不同版本的XHTML?

他们没有!例如,在XHTML 1.1中,您可以引用诸如&eacute;&nbsp;之类的字符实体,因为这些实体是在DTD中定义的。当前版本的XHTML(以前称为XHTML5)没有DTD,因此在这种情况下,您将必须使用数字引用&#233;&#160;(或在DOCTYPE中自己定义这些实体)声明。X毕竟是可扩展的。