minidom 是 Python 轻量级 DOM 解析器,加载 XML 为内存树结构;用 parse() 和 parseString() 加载文件或字符串;通过 getElementsByTagName、getAttribute、firstChild.data 等操作节点;推荐用 get_text() 安全提取文本;toprettyxml() 生成缩进 XML,需正则清理空行。
minidom 是 Python 标准库 xml.dom 模块中轻量级的 DOM 解析器,适合处理中小型 XML 文件。它把整个 XML 加载进内存,构建成树状结构,方便遍历、查询和修改节点。
用 parse() 读取文件,parseString() 解析字符串:
from xml.dom.minidom import parse, parseStringdom = 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 容易因无子节点或只有空白节点而报错。推荐封装一个辅助函数:
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])
默认 toxml() 不带换行缩进。可用 toprettyxml(),但要注意它会在每行开头加空行:
print(dom.toprettyxml(indent=" ", encoding="utf-8").decode("utf-8"))re.sub(r'^\s*\n', '', dom.toprettyxml(...), flags=re.MULTILINE)