整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

XML 和 HTML 比较:你应该知道的主要区别

现代网络技术的世界中,XML(可扩展标记语言)和 HTML(超文本标记语言) 是两个非常重要的技术。尽管它们都使用标签和属性的格式来描述数据,但它们在形式和用途上有显著的区别。

概述

什么是 XML?

XML,即 Extensible Markup Language(可扩展标记语言),是一种用于存储和传输数据的文本格式。XML 的设计宗旨是强调数据的结构化和准确性,提供了一种公认的标准格式。最主要的特点是它的自我描述性,即数据和数据的定义集成在一起,使得它在数据交换和数据存储方面具有极大优势。

  • 什么是 XML?基础入门介绍

什么是 HTML?

而 HTML,即 HyperText Markup Language(超文本标记语言),则是一种用于创建网页的标准标记语言。HTML 的主要用途是描述网页的内容和结构,通过与 CSS(层叠样式表)和 JavaScript(脚本语言)的结合,实现丰富和互动的网络应用。

区别详解

用途

  • XML:主要用作数据存储和数据交换的格式。通常用于各类应用程序之间的数据传递。例如,网络服务(Web Services)中,SOAP(简单对象访问协议)使用 XML 格式来封装消息内容。(SOAP 协议详解:什么是 SOAP 以及它如何工作?)
  • HTML:主要用于展示数据和内容。HTML 文档定义了网页的结构,它和浏览器一起使得用户可以在互联网上浏览各种信息和资源。

结构和特性

XML:

  1. 自定义标签:XML 允许用户自定义标签,这是它最大的特性之一。通过自定义标签,数据可以更加准确地描述和组织。
  2. 严格的语法要求:每一个开始标签都必须有一个闭合标签,标签必须正确嵌套,同时所有属性必须用引号括起来。
  3. 数据中心:XML 集中在描述和传输数据,而不是显示数据的外观。
<book>
    <title>Learning XML</title>
    <author>John Doe</author>
    <price>29.99</price>
</book>

HTML:

  1. 预定义标签:HTML 提供了很多预定义标签,用于构建和格式化网页内容。不允许用户自定义标签。
  2. 宽松的语法要求:虽然 HTML5 强调标签的闭合,但浏览器会容错,对一些语法错误进行修正。
  3. 展示中心:HTML 的主要目的是展示数据,定义网页的内容和结构,包括文本、图片、视频等。
<!DOCTYPE html>
<html>
<head>
    <title>My Web Page</title>
</head>
<body>
    <h1>Welcome to My Web Page</h1>
    <p>This is an introductory paragraph.</p>
</body>
</html>

数据验证

  • XML:XML 支持数据验证。可以使用 DTD(文档类型定义)或者 XML Schema 来定义和验证 XML 数据的结构和内容,使得数据更加精确和可靠。
  • HTML:HTML 没有原生的数据验证功能,它更多关注于浏览器如何解释和显示页面。对于用户提交的数据,可以通过表单验证和 JavaScript 来进行验证和处理。

可扩展性和标准化

  • XML:XML 是完全可扩展的。由于没有预定义的标签,用户可以根据需要创建适合自己应用的标签集。这使得 XML 非常灵活,可以适应不同的应用和需求。
  • HTML:HTML 是没有可扩展性的,它的标签集是由 W3C(万维网联盟)规定的标准。不允许用户随意添加新的标签,但它提供了一些扩展机制,例如使用自定义数据属性(data-* 属性)。

处理工具

  • XML:加工和处理 XML 数据的工具和接口非常多,包括 SAX(Simple API for XML)、DOM(Document Object Model)、XPath 和 XSLT 等。它们为读取、操作和转换 XML 数据提供了丰富的支持。
  • HTML:HTML 的处理主要依赖于浏览器和各种网页开发技术,比如 JavaScript、CSS、DOM 操作等,以实现动态和交互式网页内容。

如何调试 XML、JSON 格式的请求

下面使用 Apifox 来修正和测试基于 XML 的 API 请求。

创建与测试 XML 请求

假设您需要向服务器发送 XML 格式的注册信息。您可以按照以下步骤使用 Apifox 进行设置:

  • 请求类型:POST
  • 请求 URL(需替换为有效地址):http://127.0.0.1:8000/register
  • 请求头设置:Content-Type: application/xml
  • 请求体内容如下:
<userRegistration>
    <username>john_doe</username>
    <password>securePassword123</password>
    <email>john_doe@example.com</email>
</userRegistration>
  • 响应体示例:
<userRegistrationResponse>
    <userId>12345</userId>
    <username>john_dane</username>
    <status>success</status>
</userRegistrationResponse>

在 Apifox 中配置您的请求

打开 Apifox,选择开始新项目或者继续现有项目。接着点击“新建接口”,在接口设置页面,选择 POST 作为请求方法,并输入正确的请求 URL,比如 https://api.example.com/register (这里的 URL 应替换为真实可用的 URL)。在配置请求体时,选择 XML 格式,并将上述 XML 数据粘贴到配置区。

发起请求并观察结果

配置完成后,转到“运行测试”页面,点击“发送”按钮以向服务器发送构建的请求。请求发送后,检查响应部分,您应该看到类似于提供的 XML 格式的响应数据。

您还可以使用响应界面上的预览功能,该功能能让您以更直观的方式查看服务器返回的数据。

总结

XML 和 HTML 虽然在标签和属性的语法上有所相似,但它们在使用场景、结构和功能上有显著的区别。XML 强调数据的准确传输和结构化存储,适合用于数据的交换和持久化存储等场景。而 HTML 强调内容呈现和用户交互,主要用于网页设计和开发。

这些趋势中可以推断,JSON 的发展将统一 Web 的信息交换格式,XML 的使用率将继续降低。我相信 JSON 很快就会在 Web 开发中超过 XML。至于其他领域,XML 比 JSON 更好的情况并不多。

-- Tom Strassner

简介

XML 和 JSON 是现今互联网中最常用的两种数据交换格式。XML 格式由 W3C 于 1996 年提出。JSON 格式由 Douglas Crockford 于 2002 年提出。虽然这两种格式的设计目标并不相同,但它们常常用于同一个任务,也就是数据交换中。XML 和 JSON 的文档都很完善( RFC 7159 、 RFC 4825 ),且都同时具有 人类可读性(human-readable)和 机器可读性(machine-readable)。这两种格式并没有哪一个比另一个更强,只是各自适用的领域不用。(LCTT 译注:W3C 是 互联网联盟 ,制定了各种 Web 相关的标准,如 HTML、CSS 等。Douglas Crockford 除了制定了 JSON 格式,还致力于改进 JavaScript,开发了 JavaScript 相关工具 JSLint 和 JSMin )

XML 的优点

XML 与 JSON 相比有很多优点。二者间最大的不同在于 XML 可以通过在标签中添加属性这一简单的方法来存储 元数据(metadata)。而使用 JSON 时需要创建一个对象,把元数据当作对象的成员来存储。虽然二者都能达到存储元数据的目的,但在这一情况下 XML 往往是更好的选择,因为 JSON 的表达形式会让客户端程序开发人员误以为要将数据转换成一个对象。举个例子,如果你的 C++ 程序需要使用 JSON 格式发送一个附带元数据的整型数据,需要创建一个对象,用对象中的一个 名称/值对(name/value pair)来记录整型数据的值,再为每一个附带的属性添加一个名称/值对。接收到这个 JSON 的程序在读取后很可能把它当成一个对象,可事实并不是这样。虽然这是使用 JSON 传递元数据的一种变通方法,但他违背了 JSON 的核心理念:“ JSON 的结构与常规的程序语言中的结构相对应,而无需修改。(JSON’s structures look like conventional programming language structures. No restructuring is necessary.)” 1

虽然稍后我会说这也是 XML 的一个缺点,但 XML 中对命名冲突、 前缀(prefix)的处理机制赋予了它 JSON 所不具备的能力。程序员们可以通过前缀来把统一名称给予两个不同的实体。 2 当不同的实体在客户端中使用的名称相同时,这一特性会非常有用。

XML 的另一个优势在于大多数的浏览器可以把它以 具有高可读性和强组织性的方式(highly readable and organized way)展现给用户。XML 的树形结构让它易于结构化,浏览器也让用户可以自行展开或折叠树中的元素,这简直就是调试的福音。

XML 对比 JSON 有一个很重要的优势就是它可以记录 混合内容(mixed content)。例如在 XML 中处理包含结构化标记的字符串时,程序员们只要把带有标记的文本放在一个标签内就可以了。可因为 JSON 只包含数据,没有用于指明标签的简单方式,虽然可以使用处理元数据的解决方法,但这总有点滥用之嫌。

JSON 的优点

JSON 自身也有很多优点。其中最显而易见的一点就是 JSON 比 XML 简洁得多。因为 XML 中需要打开和关闭标签,而 JSON 使用名称/值对表示数据,使用简单的 { 和 } 来标记对象,[ 和 ] 来标记数组,, 来表示数据的分隔,: 表示名称和值的分隔。就算是使用 gzip 压缩,JSON 还是比 XML 要小,而且耗时更少。 3 正如 Sumaray 和 Makki 在实验中指出的那样,JSON 在很多方面都比 XML 更具优势,得出同样结果的还有 Nurseitov、Paulson、Reynolds 和 Izurieta。首先,由于 JSON 文件天生的简洁性,与包含相同信息的 XML 相比,JSON 总是更小,这意味着更快的传输和处理速度。第二,在不考虑大小的情况下,两组研究 45 表明使用 JSON 执行序列化和反序列化的速度显著优于使用 XML。第三,后续的研究指出 JSON 的处理在 CPU 资源的使用上也优于 XML。研究人员发现 JSON 在总体上使用的资源更少,其中更多的 CPU 资源消耗在用户空间,系统空间消耗的 CPU 资源较少。这一实验是在 RedHat 的设备上进行的,RedHat 表示更倾向于在用户空间使用 CPU 资源。 6 不出意外,Sumaray 和 Makki 在研究里还说明了在移动设备上 JSON 的性能也优于 XML。 7 这是有道理的,因为 JSON 消耗的资源更少,而移动设备的性能也更弱。

JSON 的另一个优点在于其对对象和数组的表述和 宿主语言(host language)中的数据结构相对应,例如 对象(object)、 记录(record)、 结构体(struct)、 字典(dictionary)、 哈希表(hash table)、 键值列表(keyed list)还有 数组(array)、 向量(vector)、 列表(list),以及对象组成的数组等等。 8 虽然 XML 里也能表达这些数据结构,也只需调用一个函数就能完成解析,而往往需要更多的代码才能正确的完成 XML 的序列化和反序列化处理。而且 XML 对于人类来说不如 JSON 那么直观,XML 标准缺乏对象、数组的标签的明确定义。当结构化的标记可以替代嵌套的标签时,JSON 的优势极为突出。JSON 中的花括号和中括号则明确表示了数据的结构,当然这一优势也包含前文中的问题,在表示元数据时 JSON 不如 XML 准确。

虽然 XML 支持 命名空间(namespace)与 前缀(prefix),但这不代表 JSON 没有处理命名冲突的能力。比起 XML 的前缀,它处理命名冲突的方式更简洁,在程序中的处理也更自然。在 JSON 里,每一个对象都在它自己的命名空间中,因此不同对象内的元素名称可以随意重复。在大多数编程语言中,不同的对象中的成员可以包含相同的名字,所以 JSON 根据对象进行名称区分的规则在处理时更加自然。

也许 JSON 比 XML 更优的部分是因为 JSON 是 JavaScript 的子集,所以在 JavaScript 代码中对它的解析或封装都非常的自然。虽然这看起来对 JavaScript 程序非常有用,而其他程序则不能直接从中获益,可实际上这一问题已经被很好的解决了。现在 JSON 的网站的列表上展示了 64 种不同语言的 175 个工具,它们都实现了处理 JSON 所需的功能。虽然我不能评价大多数工具的质量,但它们的存在明确了开发者社区拥抱 JSON 这一现象,而且它们切实简化了在不同平台使用 JSON 的难度。

二者的动机

简单地说,XML 的目标是标记文档。这和 JSON 的目标想去甚远,所以只要用得到 XML 的地方就尽管用。它使用树形的结构和包含语义的文本来表达混合内容以实现这一目标。在 XML 中可以表示数据的结构,但这并不是它的长处。

JSON 的目标是用于数据交换的一种结构化表示。它直接使用对象、数组、数字、字符串、布尔值这些元素来达成这一目标。这完全不同于文档标记语言。正如上面说的那样,JSON 没有原生支持 混合内容(mixed content)的记录。

软件

这些主流的开放 API 仅提供 XML: 亚马逊产品广告 API(Amazon Product Advertising API)。

这些主流 API 仅提供 JSON: 脸书图 API(Facebook Graph API)、 谷歌地图 API(Google Maps API)、 推特 API(Twitter API)、AccuWeather API、Pinterest API、Reddit API、Foursquare API。

这些主流 API 同时提供 XML 和 JSON: 谷歌云存储(Google Cloud Storage)、 领英 API(Linkedin API)、Flickr API。

根据 可编程网络(Programmable Web) 9 的数据,最流行的 10 个 API 中只有一个是仅提供 XML 且不支持 JSON 的。其他的要么同时支持 XML 和 JSON,要么只支持 JSON。这表明了大多数应用开发者都更倾向于使用支持 JSON 的 API,原因大概是 JSON 更快的处理速度与良好口碑,加之与 XML 相比更加轻量。此外,大多数 API 只是传递数据而非文档,所以 JSON 更加合适。例如 Facebook 的重点在于用户的交流与帖子,谷歌地图则主要处理坐标和地图信息,AccuWeather 就只传递天气数据。总之,虽然不能说天气 API 在使用时究竟是 JSON 用的多还是 XML 用的多,但是趋势明确偏向了 JSON。 10 11

这些主流的桌面软件仍然只是用 XML:Microsoft Word、Apache OpenOffice、LibraOffice。

因为这些软件需要考虑引用、格式、存储等等,所以比起 JSON,XML 优势更大。另外,这三款程序都支持混合内容,而 JSON 在这一点上做得并不如 XML 好。举例说明,当用户使用 Microsoft Word 编辑一篇论文时,用户需要使用不同的文字字形、文字大小、文字颜色、页边距、段落格式等,而 XML 结构化的组织形式与标签属性生来就是为了表达这些信息的。

这些主流的数据库支持 XML:IBM DB2、Microsoft SQL Server、Oracle Database、PostgresSQL、BaseX、eXistDB、MarkLogic、MySQL。

这些是支持 JSON 的主流数据库:MongoDB、CouchDB、eXistDB、Elastisearch、BaseX、MarkLogic、OrientDB、Oracle Database、PostgreSQL、Riak。

在很长一段时间里,SQL 和关系型数据库统治着整个数据库市场。像 甲骨文(Oracle)和 微软(Microsoft)这样的软件巨头都提供这类数据库,然而近几年 NoSQL 数据库正逐步受到开发者的青睐。也许是正巧碰上了 JSON 的普及,大多数 NoSQL 数据库都支持 JSON,像 MongoDB、CouchDB 和 Riak 这样的数据库甚至使用 JSON 来存储数据。这些数据库有两个重要的特性是它们适用于现代网站:一是它们与关系型数据库相比 更容易扩展(more scalable);二是它们设计的目标就是 web 运行所需的核心组件。 12 由于 JSON 更加轻量,又是 JavaScript 的子集,所以很适合 NoSQL 数据库,并且让这两个品质更容易实现。此外,许多旧的关系型数据库增加了 JSON 支持,例如 Oracle Database 和 PostgreSQL。由于 XML 与 JSON 间的转换比较麻烦,所以大多数开发者会直接在他们的应用里使用 JSON,因此开发数据库的公司才有支持 JSON 的理由。(LCTT 译注:NoSQL 是对不同于传统的关系数据库的数据库管理系统的统称。 参考来源 ) 13

未来

对互联网的种种变革中,最让人期待的便是 物联网(Internet of Things)(IoT)。这会给互联网带来大量计算机之外的设备,例如手表、温度计、电视、冰箱等等。这一势头的发展良好,预期在不久的将来迎来爆发式的增长。据估计,到 2020 年时会有 260 亿 到 2000 亿的物联网设备被接入互联网。 14 15 几乎所有的物联网设备都是小型设备,因此性能比笔记本或台式电脑要弱很多,而且大多数都是嵌入式系统。因此,当它们需要与互联网上的系统交换数据时,更轻量、更快速的 JSON 自然比 XML 更受青睐。 16 受益于 JSON 在 web 上的快速普及,与 XML 相比,这些新的物联网设备更有可能从使用 JSON 中受益。这是一个典型的梅特卡夫定律的例子,无论是 XML 还是 JSON,抑或是什么其他全新的格式,现存的设备和新的设备都会从支持最广泛使用的格式中受益。

Node.js 是一款服务器端的 JavaScript 框架,随着她的诞生与快速成长,与 MongoDB 等 NoSQL 数据库一起,让全栈使用 JavaScript 开发成为可能。这些都预示着 JSON 光明的未来,这些软件的出现让 JSON 运用在全栈开发的每一个环节成为可能,这将使应用更加轻量,响应更快。这也是任何应用的追求之一,所以,全栈使用 JavaScript 的趋势在不久的未来都不会消退。 17

此外,另一个应用开发的趋势是从 SOAP 转向 REST。 18 19 20 XML 和 JSON 都可以用于 REST,可 SOAP 只能使用 XML。

从这些趋势中可以推断,JSON 的发展将统一 Web 的信息交换格式,XML 的使用率将继续降低。虽然不应该把 JSON 吹过头了,因为 XML 在 Web 中的使用依旧很广,而且它还是 SOAP 的唯一选择,可考虑到 SOAP 到 REST 的迁移,NoSQL 数据库和全栈 JavaScript 的兴起,JSON 卓越的性能,我相信 JSON 很快就会在 Web 开发中超过 XML。至于其他领域,XML 比 JSON 更好的情况并不多。

角注


  1. Introducing JSON ↩
  2. XML Tutorial ↩
  3. JSON vs. XML: Some hard numbers about verbosity ↩
  4. Comparison of JSON and XML Data Interchange Formats: A Case Study ↩
  5. A comparison of data serialization formats for optimal efficiency on a mobile platform ↩
  6. Comparison of JSON and XML Data Interchange Formats: A Case Study ↩
  7. A comparison of data serialization formats for optimal efficiency on a mobile platform ↩
  8. Introducing JSON ↩
  9. Most Popular APIs: At Least One Will Surprise You ↩
  10. Why JSON will continue to push XML out of the picture ↩
  11. Thousands of APIs Paint a Bright Future for the Web ↩
  12. Why JSON will continue to push XML out of the picture ↩
  13. How JSON sparked NoSQL – and will return to the RDBMS fold ↩
  14. A Simple Explanation Of ‘The Internet Of Things’ ↩
  15. Proofpoint Uncovers Internet of Things (IoT) Cyberattack ↩
  16. Why JSON will continue to push XML out of the picture ↩
  17. Why JSON will continue to push XML out of the picture ↩
  18. Thousands of APIs Paint a Bright Future for the Web ↩
  19. 3,000 Web APIs: Trends From A Quickly Growing Directory ↩
  20. How REST replaced SOAP on the Web: What it means to you ↩

via: https://www.cs.tufts.edu/comp/150IDS/final_papers/tstras01.1/FinalReport/FinalReport.html

作者: TOM STRASSNER 选题: lujun9972 译者: wwhio 校对: wxy

本文由 LCTT 原创编译, Linux中国 荣誉推出

点击“了解更多”可访问文内链接

软件开发领域,XML(eXtensible Markup Language)和JSON(JavaScript Object Notation)是两种常用的结构化数据表示格式。它们在存储和传输数据时起到了至关重要的作用,但它们各自有着不同的特点和适用场景。本文将深入探讨XML和JSON,并通过使用C#设计典型的应用实例代码来进一步说明它们的用法和区别。

XML(eXtensible Markup Language)

XML是一种可扩展的标记语言,旨在提供一种方法来描述数据结构和存储数据。它使用起始标签和结束标签来定义数据的层次结构,类似于HTML。以下是XML的一个示例:

<bookstore>
  <book category="fiction">
    <title>Harry Potter</title>
    <author>J.K. Rowling</author>
    <year>2005</year>
    <price>29.99</price>
  </book>
  <book category="non-fiction">
    <title>Introduction to XML</title>
    <author>John Smith</author>
    <year>2010</year>
    <price>39.95</price>
  </book>
</bookstore>

XML的优点:

  1. 可读性强:XML使用标签和嵌套结构,易于人类阅读和理解。
  2. 支持命名空间:XML允许使用命名空间来避免元素名称的冲突。
  3. 丰富的工具支持:有许多XML解析器和处理工具可用于处理XML数据。
  4. 强大的验证机制:XML Schema和DTD(Document Type Definition)提供了验证XML文档结构的机制。

XML的缺点:

  1. 冗余性高:XML使用了大量的标签,因此文件体积相对较大,传输效率较低。
  2. 解析复杂:相对于JSON,解析XML需要更多的处理步骤和资源。
  3. 可读性差:由于标签的嵌套结构,XML文件在包含大量数据时可能变得难以阅读。

JSON(JavaScript Object Notation)

JSON是一种轻量级的数据交换格式,通常用于Web应用程序中。它采用键/值对的方式来表示数据,类似于JavaScript中的对象字面量。以下是JSON的一个示例:

{
  "bookstore": {
    "book": [
      {
        "category": "fiction",
        "title": "Harry Potter",
        "author": "J.K. Rowling",
        "year": 2005,
        "price": 29.99
      },
      {
        "category": "non-fiction",
        "title": "Introduction to XML",
        "author": "John Smith",
        "year": 2010,
        "price": 39.95
      }
    ]
  }
}

JSON的优点:

  1. 数据量小:JSON不使用标签,因此文件体积相对较小,传输效率高。
  2. 解析简单:与XML相比,解析JSON需要更少的处理步骤和资源。
  3. 易于使用:JSON的语法简洁明了,易于编写和理解。
  4. 与JavaScript兼容:JSON是JavaScript的子集,因此在JavaScript中的处理和使用非常方便。

JSON的缺点:

  1. 不支持命名空间:JSON不支持命名空间,因此在处理复杂数据结构时可能会出现名称冲突。
  2. 不支持注释:JSON不支持注释,这可能使得在文档中添加额外的说明信息变得困难。

C#应用实例:读取XML和JSON数据

下面是使用C#读取XML和JSON数据的示例代码:

using System;
using System.Xml;
using Newtonsoft.Json.Linq;

class Program
{
    static void Main()
    {
        // 读取XML数据
        XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.Load("data.xml");
        XmlNodeList bookNodes = xmlDoc.SelectNodes("/bookstore/book");
        foreach (XmlNode node in bookNodes)
        {
            Console.WriteLine("Title: {0}, Author: {1}", 
                node.SelectSingleNode("title").InnerText,
                node.SelectSingleNode("author").InnerText);
        }

        // 读取JSON数据
        string jsonText = System.IO.File.ReadAllText("data.json");
        JObject jsonObject = JObject.Parse(jsonText);
        JArray booksArray = (JArray)jsonObject["bookstore"]["book"];
        foreach (JToken book in booksArray)
        {
            Console.WriteLine("Title: {0}, Author: {1}", 
                book["title"],
                book["author"]);
        }
    }
}

结论与适用场景

  • XML适用场景:XML适用于需要严格结构化数据和复杂数据关系的场景,例如配置文件、SOAP消息等。
  • JSON适用场景:JSON适用于Web应用程序和API中的数据交换,特别是与JavaScript配合使用的情况下,其简洁性和易解析性使得在前端开发中更为常见。

总结

综上所述,XML和JSON各有优缺点,并且适用于不同的应用场景。在选择使用哪种结构化文本时,需要根据具体的需求和环境来进行综合考虑。


上一篇:HTML创建用户反馈表单
下一篇:HTML 元素