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

如何用Python解析Desc XML文件生成仅含内容的MeSH概念树视图?

解决MeSH Desc XML解析树视图显示XML标签的问题

问题背景

解析MeSH的Desc XML文件生成概念树视图时,输出结果包含XML标签名或元素对象信息,需要改为只显示标签内的文本内容。

示例场景

示例XML片段

<DescriptorRecord>
  <DescriptorName>
    <String>Neoplasms</String>
  </DescriptorName>
  <TreeNumberList>
    <TreeNumber>C04</TreeNumber>
  </TreeNumberList>
  <ConceptList>
    <Concept>
      <ConceptName>
        <String>Neoplasms</String>
      </ConceptName>
    </Concept>
  </ConceptList>
</DescriptorRecord>

原错误代码(输出带标签)

import xml.etree.ElementTree as ET

def build_tree(element, indent=0):
    print("  " * indent + str(element))
    for child in element:
        build_tree(child, indent + 1)

tree = ET.parse('desc2024.xml')
root = tree.getroot()
build_tree(root)

解决方案

核心思路

递归遍历XML元素时,提取元素的文本内容(而非元素对象或标签名),同时可通过筛选标签只保留MeSH树的核心信息。

基础版:提取所有非空白文本

import xml.etree.ElementTree as ET

def build_mesh_tree(element, indent=0):
    # 提取并清理文本内容
    text = element.text.strip() if element.text else ""
    if text:
        print("  " * indent + text)
    
    # 递归处理子元素
    for child in element:
        build_mesh_tree(child, indent + 1)

# 解析XML文件
tree = ET.parse('desc2024.xml')
root = tree.getroot()

# 生成纯文本树视图
build_mesh_tree(root)

精准版:只保留MeSH核心节点

如果只需要Descriptor名称、树编号、概念名称等关键信息,可针对性筛选标签:

import xml.etree.ElementTree as ET

def build_targeted_mesh_tree(element, indent=0):
    # 定义需要保留的核心标签
    target_tags = {'DescriptorName', 'String', 'TreeNumber', 'ConceptName'}
    if element.tag in target_tags:
        text = element.text.strip() if element.text else ""
        if text:
            print("  " * indent + text)
    
    for child in element:
        build_targeted_mesh_tree(child, indent + 1)

tree = ET.parse('desc2024.xml')
root = tree.getroot()
build_targeted_mesh_tree(root)

注意事项

  • 如果XML包含命名空间,需先注册命名空间避免标签前缀问题:ET.register_namespace('', 'http://www.nlm.nih.gov/mesh')
  • 使用strip()去除文本前后的换行、缩进等空白字符,让树视图更整洁

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 02:35:18