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 传数据——格式错了数据就不可信了,所以解析器遇到错误直接报停。具体规则对比:
| 规则 | XML | HTML |
|---|---|---|
| 标签关闭 | 必须关闭,自闭合写 <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。