接上文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 次;
(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 被淘汰的原因在于:
|
受文章篇幅所限,下文将继续介绍 Python 解析 XML 的相关知识。