HTML 和 XHTML 有什么区别?

2023-12-01

注意:这应该是这个问题的规范帖子。已经存在许多答案,但对各种差异的描述分散在各处,而且通常,他们还提供“我应该使用哪一个”的意见,我将在这里避免这种情况。
如果您还有更多问题要问,或者您知道更多差异,请随时进行编辑。

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


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元素,即包含纯文本而不是标记的元素。
其他一些元素是可转义的原始文本元素,其中引用如下&#233;将被解析,但类似的事情<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 中,您可以引用字符实体,例如&eacute; and &nbsp;,因为这些实体是在 DTD 中定义的。当前版本的 XHTML(以前称为 XHTML5)没有 DTD,因此在本例中您必须使用数字引用&#233; and &#160;(或者,在 DOCTYPE 声明中自己定义这些实体。毕竟 X 意味着可扩展)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HTML 和 XHTML 有什么区别? 的相关文章

随机推荐

  • 如何在Windows中安装openCV for python 3.6(64位)

    我能够将 openCV 用于 32 位 python 但是我必须切换到 64 位才能使用 TensorFlow 我确实按照 opencv 页面的说明进行操作here 但是我仍然无法导入 cv2 或 cv3 我对替代方案持开放态度 我只是想将
  • 如何隐藏 Woocommerce“缺货”商品的价格

    我想在 WooCommerce 中显示我的缺货商品 但没有价格 有什么简单的方法可以隐藏 缺货 商品的价格吗 Thanks 将这些添加到 CSS 对我来说很有效 第一个从缺货商品页面中删除价格 第二个从搜索结果中的缺货商品中删除价格 out
  • 如何在 ASP.NET 会话 Cookie 上设置安全标志?

    如何在 ASP NET 会话 Cookie 上设置安全标志 以便它仅通过 HTTPS 传输 而绝不会通过纯 HTTP 传输 In the
  • 有没有办法在使用带有信号处理程序的多线程程序时确保原子性?

    如果我有一个这样的程序 伪代码 mutex lock func lock mutex lock Some code long enough to make a race condition if no proper synchronisat
  • 静态库中的 VC++ 资源

    是否可以将资源构建到静态库中并通过简单地与库链接来重用它们 我主要考虑这样的情况 您调用库中的函数 该函数又访问资源 要在 Visual C 2008 的静态库中使用资源 图像 对话框等 您唯一需要做的就是包含静态库的关联 res 文件在你
  • 还有其他方法可以去除多个头吗?

    假设我有这个 hg init touch a hg add a hg commit m a touch b hg add b hg commit m b hg up r 0 touch c hg add c hg commit m c 由于
  • 我可以将 fscanf 与 C 语言中的二进制文件一起使用吗?

    所以我参加了考试 其中一个练习包括从二进制文件中扫描姓名 我曾经用过fscanf 但我的教授告诉我 我不能在二进制文件中使用 fscanf 但为什么 即使我这样做 我的程序也能正常工作 我承认我没有找到一种方法来解释哪里出了问题fscanf
  • 使用 cakephp 3.0 进行生产安全吗?

    我们正在开始一个新项目 需要 2 3 个月才能完成 我应该在 beta 3 刚刚发布后就构建 3 0 版本 还是继续使用 2 5 并在 3 0 稳定版本最终发布时进行转换 您需要定义 安全 对您的标准意味着什么 安全方面安全吗 我想说几乎是
  • 在整数前面包含零[重复]

    这个问题在这里已经有答案了 我想用一个数字来代表我正在开发的 SpriteKit 游戏中玩家的得分 var score 000000000 然后 我创建一个 SKLabelNode 并将其作为字符串 SCORE score 的一部分 因此
  • 谷歌地理编码,异步Javascript,不起作用[重复]

    这个问题在这里已经有答案了 我在外部 js 文件中有一个函数 该函数应该获取地址字符串 然后返回纬度和经度 它什么也不返回 有人可以帮忙吗 我也想问 在 javascript 中 当您从另一个函数中调用异步函数时 外部函数终止后 异步函数是
  • 在Javascript中计算距下一个生日的剩余天数

    我正在尝试计算距下一个生日的剩余天数 但不断遇到问题 这是到目前为止的代码 如果您的生日已经是今年等 则存在一些负数问题 关于如何解决这个问题有什么建议吗 var birthdayDate new Date year month 1 day
  • 如何在java中的for循环中重用变量而不初始化新变量?

    我正在用java编写一个函数 它计算字符串中空格后面的字符数 这个问题对你们中的一些人来说可能听起来微不足道 public int countAfterSpaces final String a int position 0 escapes
  • JavaScript 中 $$ 是什么意思?

    我正在查看一些 javascript 代码 它在一个函数中包含以下内容 CssClass each function x 我知道其目的是将匿名函数应用于具有 CssClass 类的每个元素 但我无法处理 所指的内容 并且无法通过 googl
  • 如何枚举 IAsyncEnumerable 并为每个元素调用异步操作,从而允许每个迭代/操作对并发?

    我有一个IAsyncEnumerable
  • 在 ng-if/*ngIf 中使用函数调用是一个不好的做法吗? [复制]

    这个问题在这里已经有答案了 在 ng if 中使用函数调用的返回值是一个不好的做法吗 它会影响消化周期 性能吗 与视图中使用的任何表达式一样 它将在每个摘要循环中重新评估 以查看其值是否已更改 从而确定是否必须删除该元素或将其添加到 DOM
  • 在 React 中的组件之间共享数据

    我正在开发一个使用 Meteor 和 React 作为视图引擎的应用程序 考虑这个图 React 隐藏另一个示例中的组件 当 C4 按钮单击事件被触发时 我需要更改 C2 组件状态 由于它们没有直接关系 我无法直接从 C4 访问 C2 状态
  • 寻找 FragmentStatePagerAdapter 的替代品

    我想找到 FragmentStatePagerAdapter PagerFragment 的替代品 因为我们都知道 FragmentStatePagerAdapter 至今仍处于崩溃状态 我和 github 上已经进行了很多尝试来制作一些模
  • 是否可以在 ARM (Android/Linux) 上的执行过程中更改字节序?

    我想知道是否可以在 ARM 平台上更改正在运行的应用程序中间执行的字节序 正如你们中的一些人所知 ARM 是双字节序 支持大字节序和小字节序 我想知道在 Android 或一般的 Linux 上是否可以设置单个应用程序在执行时使用不同的字节
  • 启用适用于 Android 的 Places SDK 时出现问题 (google)

    请帮忙 当我单击 Places SDK For android 访问页面以启用时 显示如下 您没有足够的权限查看此页面 追踪号码 4169288790274014457 有什么问题 我应该怎么做才能启用这个API 谢谢 无法启用 Place
  • HTML 和 XHTML 有什么区别?

    注意 这应该是这个问题的规范帖子 已经存在许多答案 但对各种差异的描述分散在各处 而且通常 他们还提供 我应该使用哪一个 的意见 我将在这里避免这种情况 如果您还有更多问题要问 或者您知道更多差异 请随时进行编辑 XHTML 和 HTML