You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

xml.dom.minidom如何提取指定属性值标签下的子标签内容

xml.dom.minidom 提取指定属性节点下子标签内容实现方法

问题场景

现有如下XML结构:

<animals>
      <pet type="dog">
        <name>Jack</name>
        <name>Benny</name>
        <name>Will</name>
      </pet>
      <pet type="cat">
        <name>Luna</name>
        <name>Lilith</name>
        <name>Willow</name>
      </pet>
      <pet type="rabbit">
        <name>Lilly</name>
        <name>Robin</name>
      </pet>
</animals>

需要仅提取type属性值为dog的<pet>标签下所有<name>子标签的内容,即Jack、Benny、Will三个值,要求仅使用xml.dom.minidom库实现,不引入ElementTree。
原有错误代码运行后会输出所有宠物名称,问题在于提前在全文档范围获取了所有name节点集合,遍历匹配到dog类型pet时,循环的仍然是全文档的name节点,没有做范围限定。
原有错误代码:

name = file.getElementsByTagName('name')
pets = file.getElementsByTagName('pet')
for i in pets:
    if (i.attributes['type'].value == "dog"):
            for j in name: 
               print(j.firstChild.data)

修正方案

核心逻辑:getElementsByTagName是DOM节点的实例方法,调用者是哪个节点,查找范围就会被限定在该节点的子树范围内。不需要提前全局获取name节点,等匹配到type="dog"的pet节点后,再在该pet节点上调用方法查找内部的name节点即可。
修正后可直接运行的代码:

from xml.dom import minidom

# 替换为你的XML文件实际路径
doc = minidom.parse("animals.xml")
# 获取所有pet节点
pet_nodes = doc.getElementsByTagName("pet")

for pet in pet_nodes:
    # 匹配type属性为dog的pet节点,用getAttribute取属性更稳妥,属性不存在时返回None不会抛KeyError
    if pet.getAttribute("type") == "dog":
        # 仅在当前dog类型pet节点范围内查找name子节点
        name_nodes = pet.getElementsByTagName("name")
        for name in name_nodes:
            # 提取标签文本输出
            print(name.firstChild.data)

运行输出结果:

Jack
Benny
Will

内容的提问来源于stack exchange,提问作者Kim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.16 16:15:41