当前位置:首页>python>Python开发从零开始-44.4-解析 XML

Python开发从零开始-44.4-解析 XML

  • 2026-10-11 06:00:26
Python开发从零开始-44.4-解析 XML

接上文Python开发从零开始-44.3-解析 XML,本文小编与大家分享 Python 解析 XML 的相关知识。

8、空格和换行

XML 中的空格和换行属于‌空白字符‌(包括空格 U+0020、制表符 \t、换行 \n、回车 \r),其处理核心在于区分“‌有意义空白‌”与“‌格式化空白‌”,具体行为取决于内容位置及解析器配置。‌‌其核心处理规则如下:

  • ‌属性值中的空白‌:必须规范化。所有换行、回车、制表符在解析时统一替换为‌单个空格‌,这是 XML 标准强制行为,无法通过属性改变;

  • ‌元素文本内容中的空白‌:默认‌保留‌原始字符,但许多解析器(如 Java DOM、Python ElementTree)默认会忽略仅用于排版缩进的“无意义空白”;

  • 标记外空白‌:元素标签之间(如 </name> <age>)的空白通常被视为无意义,多数解析器默认丢弃,除非显式配置保留。

  • 若文本包含大量特殊字符且需完全保留格式,可用 DTD 或 XML模式,解析器不进行任何转义或空白处理。

9、文档类型定义(DTD)

XML 文档必须符合其文档类型定义(DTD)或 XML 模式,以确保文档结构和内容的正确性和一致性。

(1)什么是 DTD

‌DTD(Document Type Definition,文档类型定义)是用来规定 XML 文档结构和语法规则的约束机制‌,它是 XML 1.0 规格的一部分。DTD 定义了 XML 中允许出现的元素、属性及其关系,确保文档格式正确且符合规范。‌‌

(2)DTD 的核心作用‌

  • ‌验证文档合法性‌:通过对比 XML 文档和 DTD 规则,检查文档是否符合规范,元素和标签使用是否正确;

  • ‌统一数据交换格式‌:不同公司或系统使用同一个 DTD 标准,可以确保数据格式一致,方便网络共享和数据交互;

  • ‌提高代码可读性‌:为 XML 文档中的元素和属性指定有意义的名称,降低开发和维护成本。

(3)DTD 基本语法

‌① DTD 的声明方式‌:

  • ‌内部 DTD‌:直接写在 XML 文件内,包裹在 <!DOCTYPE> 定义内。

  • ‌外部 DTD‌:通过 SYSTEM 或 PUBLIC 引用外部.dtd 文件,可被多个 XML 共享。

  • ‌内外结合‌:同时使用内部和外部声明。‌‌

② DTD 的四大组成部分‌:

  • ‌元素声明‌:使用 <!ELEMENT> 定义元素名称和内容类型;

  • ‌属性列表‌:使用 <!ATTLIST> 定义元素属性及其类型;

  • ‌实体声明‌:使用 <!ENTITY> 定义可重用的内容或特殊字符;

  • ‌注释‌:用于说明和标注。‌‌

‌③ 常见元素类型和限制符号‌:

  • ‌元素内容类型‌:(#PCDATA) 表示文本内容、EMPTY 表示空元素、(子元素序列) 表示特定子元素;

  • ‌数量限制符号‌:? 表示 0 或 1 次、* 表示 0 或多次、+ 表示 1 或多次、无符号表示恰好 1 次;

  • ‌属性设置说明‌:#REQUIRED 表示必须提供、#IMPLIED 表示可选、#FIXED 表示固定值。‌‌‌

(4)DTD 实例

<?xml version="1.0" ending="UTF-8"?><!DOCTYPE mail [<!ELEMENT note (to, from, heading, body)><!ELEMENT to (#PCDATA)><!ELEMENT from (#PCDATA)><!ELEMENT heading (#PCDATA)><!ELEMENT body (#PCDATA)>]><?xml version="1.0" encoding="UTF-8"?><mail>    <to>Jack@example.com</to>    <from>Rose@example.com</from>    <heading>测试邮件</heading>    <body>这是一封 XML 测试邮件</body></mail>

有关 DTD 语法大家可以查看官方文档或网络教程。

【小编提示】

随着XML的发展,DTD 逐渐被 XSD(XML Schema Definition)所取代,后者提供了更强大的数据类型定义、更复杂的结构约束以及更好的互操作性。DTD 被淘汰的原因在于:

  • ‌灵活性不足‌:DTD 在处理复杂数据类型和结构时显得力不足。例如,它不支持命名空间,这限制了其在大规模、复杂项目中应用的能力;

  • 功能限制‌:DTD 不支持数据类型的完全定义,比如日期、时间或数值的范围和精度。相比之下,XSD 在这方面提供了更丰富的功能;

  • ‌命名空间支持‌:DTD 不支持 XML 命名空间,这在现代 XML 应用中是一个重要的特性,尤其是在涉及到多语言或多来源数据集成时;

  • ‌性能问题‌:在一些情况下,使用 DTD 解析 XML文档可能比使用 XSD 慢,尤其是在处理大型文件时。

受文章篇幅所限,下文将继续介绍 Python 解析 XML 的相关知识。

最新文章

随机文章