5月28日 03:49

XML 和 HTML 有什么区别?

XML 和 HTML 都是标记语言,但定位完全不同:HTML 是用来显示网页内容的,标签全预定义;XML 是用来存储和传输数据的,标签可以自己定义。面试中抓住"设计目的""标签定义""语法严格性"三个核心差异展开就够。

一段代码看清区别

html
<!-- HTML:预定义标签,关注显示 --> <h1>用户信息</h1> <p>姓名:张三</p> <!-- XML:自定义标签,关注数据结构 --> <user> <name>张三</name> <age>28</age> </user>

同样的"用户信息",HTML 关心怎么在页面上展示,XML 关心数据本身的含义和层级关系。这个根本分歧决定了两者在语法、结构、应用场景上的所有差异。

追问

XML 和 HTML 的语法严格性有什么具体区别?

XML 严格得多,根本原因在于两者的容错需求不同。HTML 要容错——网页打不开用户就直接走了,所以浏览器会尽可能猜测意图并渲染。XML 传数据——格式错了数据就不可信了,所以解析器遇到错误直接报停。具体规则对比:

规则XMLHTML
标签关闭必须关闭,自闭合写 <br/><p> <br> 可不关
大小写区分,<Name><name>不区分
属性引号必须加有时可省
根元素有且仅有一个允许多个(不推荐)
嵌套必须严格正确嵌套允许部分错误嵌套

面试时说出"容错需求不同导致语法严格性不同"这个根本原因,比单纯背规则更体现理解深度。

DTD 和 XML Schema 是什么?有什么区别?

两者都约束 XML 文档结构——哪些标签能出现、顺序如何、数据类型是什么。DTD 是早期方案,语法简单但功能有限:不支持数据类型定义(只能区分 PCDATA 和 CDATA)、不支持命名空间、用的不是 XML 语法本身。XML Schema(XSD)更强大:支持 string/integer/date 等丰富数据类型、命名空间避免标签冲突、正则约束,而且 XSD 本身就是 XML 格式写的,可以用 XML 工具链处理。实际项目优先用 XSD,DTD 基本只在维护遗留系统时遇到。

实际项目里 XML 还常用吗?

Web 开发中 XML 的使用确实在下降,但远没到淘汰的程度:Spring 的 bean 配置、Maven 的 pom.xml、Android 的布局文件和 AndroidManifest.xml、SVG 矢量图、Office 文档格式(.docx/.xlsx 本质是 ZIP 包裹的 XML)——这些你日常都在用。新项目的数据接口基本都改用 JSON 了,但 XML 在配置文件和文档格式领域仍有不可替代的位置。安全方面有个高频考点:XXE 漏洞(XML 外部实体注入)——攻击者通过 <!ENTITY xxe SYSTEM "file:///etc/passwd"> 读取服务器文件,防护方式是解析器禁用外部实体。

XML 和 JSON 相比各有什么优劣?

JSON 轻量、解析快、和 JavaScript 天然亲和,是 Web API 主流。XML 的优势在于:属性和嵌套两种信息表达方式(<user id="1"><name>张三</name></user> 里 id 是属性、name 是子元素,JSON 没有这种区分)、成熟的 schema 验证(XSD)、命名空间避免标签冲突(SOAP 消息里 <soap:Body><wsa:Action> 共存)、注释和元数据更丰富。需要严格验证和复杂结构选 XML,追求轻量和速度选 JSON。一个实用判断:配置文件和文档格式选 XML,API 数据交换选 JSON。

标签:XML