跳转到内容
新建笔记

XML 文档与数据格式

XML 用元素、属性和文本表示树形文档。它比 JSON 冗长,但具有命名空间、混合文本内容和成熟的 Schema 工具,仍广泛用于文档格式、工程配置和既有协议。

<?xml version="1.0" encoding="UTF-8"?>
<devices>
<device id="sensor-a">
<enabled>true</enabled>
<port>8000</port>
</device>
</devices>

一个良构 XML 文档必须满足:

  • 只有一个根元素。
  • 开始和结束标签正确嵌套,元素名区分大小写。
  • 属性值使用引号。
  • 文本中的 < 和 & 分别写为 &lt; 和 &amp;。
  • 声明的字符编码与实际字节编码一致。

“良构”只表示语法合法。要约束元素顺序、数量和数据类型,还需要 XSD、RELAX NG 等 Schema,或应用层验证。

优先用元素表达主要数据和可扩展内容,用属性表达简短、不可重复的元数据。不要把大型文本或需要层级结构的数据塞进属性。

<device id="sensor-a" status="active">
<description>生产线入口传感器</description>
</device>

命名空间 URI 用于区分不同词汇表中的同名元素;它是标识符,不要求能够在浏览器中打开。

<cfg:device xmlns:cfg="urn:example:device-config">
<cfg:name>sensor-a</cfg:name>
</cfg:device>

解析时应按“命名空间 URI + 本地名”匹配,不要依赖前缀 cfg,因为前缀可以改变。

场景策略
小型文档、需要随机访问DOM 或等价树模型
大文件、只需顺序处理流式解析器,例如 SAX 或 pull parser
必须符合固定结构解析后执行 Schema 或应用层验证
不受信任输入禁用外部实体、外部 DTD 和不必要的网络访问

在 Qt 中,QXmlStreamReader 和 QXmlStreamWriter 适合流式读写。无论使用哪种库,都要检查解析器错误,并对缺失、重复和未知字段制定明确策略。

XML 的能力较多,也意味着默认行为更多。处理外部输入时先收紧解析器功能,再考虑便利性。


来源:CSDN 原文,首次发布于 2025-03-26。