【问题标题】:Parsing subelements with elementTree用 elementTree 解析子元素
【发布时间】:2026-02-12 09:30:01
【问题描述】:

我在一个 XML 文件中有代码,我使用 et.parse 对其进行解析:

<VIAFCluster xmlns="http://viaf.org/viaf/terms#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:void="http://rdfs.org/ns/void#" xmlns:foaf="http://xmlns.com/foaf/0.1/">
<viafID>15</viafID>
<nameType>Personal</nameType>
</VIAFCluster>
<mainHeadings>
    <data>
       <text>
          Gondrin de Pardaillan de Montespan, Louis-Antoine de, 1665-1736
       </text>
    </data>
</mainHeadings>

我想将其解析为:

[15,“个人”,“Gondrin 等”]

我似乎无法打印任何字符串信息:

import xml.etree.ElementTree as ET

tree = ET.parse('/Users/user/Documents/work/oneline.xml')
root = tree.getroot()

for node in tree.iter():
    name = node.find('nameType')
    print(name)

因为它显示为“无”......我做错了什么?

【问题讨论】:

  • 尝试打印节点,它包含所有根元素(名称类型也是如此)。当您遍历根元素时,其中一个节点将是 nameType 元素,它会找到 None 因为您实际上是在尝试在 nameType 元素中查找 nameType 元素,而您已经在 node 变量中找到了它。跨度>

标签: python xml parsing elementtree


【解决方案1】:

我仍然不确定您到底想要做什么,但希望如果您运行下面的代码,它将帮助您顺利上路。使用 getiterator 函数遍历元素将让您了解发生了什么。您可以在来找他们时拿起您想要的东西:

import xml.etree.ElementTree as et
xml = '''
<VIAFCluster xmlns="http://viaf.org/viaf/terms#" 
             xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
             xmlns:void="http://rdfs.org/ns/void#" 
             xmlns:foaf="http://xmlns.com/foaf/0.1/">
    <viafID>15</viafID>
    <nameType>Personal</nameType>
    <mainHeadings>
        <data>
           <text>
              Gondrin de Pardaillan de Montespan, Louis-Antoine de, 1665-1736
           </text>
        </data>
    </mainHeadings>
</VIAFCluster>
'''
tree = et.fromstring(xml)
lst = []
for i in tree.getiterator():
    t = i.text.strip()
    if t:
        lst.append(t)
        print i.tag
        print t

你最终会得到一个你想要的列表。我不得不清理你的 xml,因为你有不止一个*元素,这是一个禁忌。也许这一直是你的问题。

祝你好运,迈克

【讨论】: