minidom 是 Python 轻量级 DOM 解析器,加载 XML 为内存树结构;用 parse() 和 parseString() 加载文件或字符串;通过 getElementsByTagName、getAttribute、firstChild.data 等操作节点;推荐用 get_text() 安全提取文本;toprettyxml() 生成缩进 XML,需正则清理空行。

minidom 是 Python 标准库 xml.dom 模块中轻量级的 DOM 解析器,适合处理中小型 XML 文件。它把整个 XML 加载进内存,构建成树状结构,方便遍历、查询和修改节点。
加载并解析 XML 字符串或文件
用 parse() 读取文件,parseString() 解析字符串:
from xml.dom.minidom import parse, parseString-
dom = parse("config.xml")—— 从文件加载 -
dom = parseString("—— 从字符串加载 ")- A
获取元素节点(常用方法)
DOM 中所有标签都是 Element 节点,通过以下方式定位:
-
dom.getElementsByTagName("tagname"):返回 NodeList(类似列表),支持索引访问,如items[0] -
dom.documentElement:获取根元素节点 -
node.getAttribute("attr"):获取属性值,如item.getAttribute("id") -
node.firstChild.data或node.childNodes[0].data:获取文本内容(注意空白换行也可能是 Text 节点)
安全提取文本内容(避免空节点报错)
直接访问 firstChild.data 容易因无子节点或只有空白节点而报错。推荐封装一个辅助函数:
立即学习“Python免费学习笔记(深入)”;
def get_text(node):
if node and node.firstChild and node.firstChild.nodeType == node.TEXT_NODE:
return node.firstChild.data.strip()
return ""
然后这样用:name = get_text(dom.getElementsByTagName("name")[0])
生成格式化 XML 字符串(带缩进)
默认 toxml() 不带换行缩进。可用 toprettyxml(),但要注意它会在每行开头加空行:
print(dom.toprettyxml(indent=" ", encoding="utf-8").decode("utf-8"))- 若要清除多余空行,可后处理:
re.sub(r'^\s*\n', '', dom.toprettyxml(...), flags=re.MULTILINE)










