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

Python解析XML:获取指定节点下所有子节点的值

用Python解析XML获取指定节点下所有子节点的值

嘿,这事儿好办!咱直接用Python标准库自带的xml.etree.ElementTree就能搞定,不用额外装第三方包,省心又靠谱。

先把你给的XML内容整理完整(补全了截断的部分,不影响解析逻辑):

<abstract>
  <title>摘要</title>
  <p>Amphinomids(俗称火蠕虫)是海洋环节动物的基干类群,其特征是具有防御性背侧钙质刚毛,接触时会脱落。长期以来有假说认为Amphinomids具有毒性,会利用刚毛注入有毒物质。然而,从形态学或分子角度研究火蠕虫毒液的研究十分匮乏,至今未发现毒腺,也未在分子水平上鉴定出任何毒素。为探究该问题,我们分析了三种火蠕虫的转录组——<italic>Eurythoe complanata</italic>, <italic>Hermodice carunculata</italic>的内容</p>
</abstract>

下面是具体的解析代码,我给你写了两种场景:解析字符串形式的XML,以及解析本地XML文件,你按需用就行。

场景1:解析字符串形式的XML

import xml.etree.ElementTree as ET

# 定义你的XML字符串(如果是从其他地方获取的,直接替换就行)
xml_content = """
<abstract>
  <title>摘要</title>
  <p>Amphinomids(俗称火蠕虫)是海洋环节动物的基干类群,其特征是具有防御性背侧钙质刚毛,接触时会脱落。长期以来有假说认为Amphinomids具有毒性,会利用刚毛注入有毒物质。然而,从形态学或分子角度研究火蠕虫毒液的研究十分匮乏,至今未发现毒腺,也未在分子水平上鉴定出任何毒素。为探究该问题,我们分析了三种火蠕虫的转录组——<italic>Eurythoe complanata</italic>, <italic>Hermodice carunculata</italic>的内容</p>
</abstract>
"""

# 解析XML
root = ET.fromstring(xml_content)

# 指定要获取子节点的目标节点(这里<abstract>是根节点,直接用root就行;如果目标节点不是根,用root.find('节点名'))
target_node = root

# 遍历目标节点的所有直接子节点,获取每个子节点的完整文本值
child_values = []
for child in target_node:
    # .text只能获取节点开头的文本,用ET.tostring可以拿到节点下所有文本(包括子节点的文本),然后解码成字符串
    full_text = ET.tostring(child, encoding='utf-8', method='text').decode('utf-8').strip()
    child_values.append((child.tag, full_text))

# 输出结果
for tag, value in child_values:
    print(f"节点<{tag}>的值:{value}")

运行这段代码后,你会得到:

节点<title>的值:摘要
节点<p>的值:Amphinomids(俗称火蠕虫)是海洋环节动物的基干类群,其特征是具有防御性背侧钙质刚毛,接触时会脱落。长期以来有假说认为Amphinomids具有毒性,会利用刚毛注入有毒物质。然而,从形态学或分子角度研究火蠕虫毒液的研究十分匮乏,至今未发现毒腺,也未在分子水平上鉴定出任何毒素。为探究该问题,我们分析了三种火蠕虫的转录组——Eurythoe complanata, Hermodice carunculata的内容

场景2:解析本地XML文件

如果你的XML是存在本地文件(比如abstract.xml)里的,代码可以改成这样:

import xml.etree.ElementTree as ET

# 加载并解析XML文件
tree = ET.parse('abstract.xml')
root = tree.getroot()

target_node = root  # 同样,这里<abstract>是根节点,直接用root

# 后续逻辑和场景1完全一样
child_values = []
for child in target_node:
    full_text = ET.tostring(child, encoding='utf-8', method='text').decode('utf-8').strip()
    child_values.append((child.tag, full_text))

for tag, value in child_values:
    print(f"节点<{tag}>的值:{value}")

小提示

  • 如果你的目标节点不是根节点,比如要找某个深层节点,用root.find('父节点/子节点')或者root.findall()来定位就行。
  • 要是XML里有命名空间,记得提前处理命名空间映射,不然会找不到节点哦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:16:27