如何提取具有相同名称的 XML 标记/实体?

Posted

技术标签:

【中文标题】如何提取具有相同名称的 XML 标记/实体?【英文标题】:How do i extract XML tags/entity with the same name? 【发布时间】:2021-12-02 11:52:54 【问题描述】:

你可以从我的 xml 中看到,它有两个菠萝,我想提取它的值。我对python很陌生,希望你能帮助我!

-<csData>
-<entity name="1" parentEntity="123" type='a'>

<attribute name="ab" value = ""/>

**<attribute name="pineapple" value = "0.9099"/>**

<attribute name="ac" value = ""/>

-<entity name="0" parentEntity="234" type='a'>

<attribute name="ab" value = ""/>

**<attribute name="pineapple" value = "0.2881"/>**

<attribute name="ac" value = ""/>
</csData>

所以我想在这里提取 PINEAPPLE 的值,这里是我拥有的代码:

def extract_pineapple(self, cd, cs, pineapple, root):
  data = 'cd_id': cd_id, 'cs_id'=cs=id
  for c in root.findall("./csData/entity[@type='a']"):
     for attr in c.findall("./attribute[@name:'pineapple']:
         data['pineapple'] = c.find("./attribute[@name='pineapple'].get('value')
return [data]

输出: 它只提取了一个值: 菠萝:0.2881 菠萝:0.2881

我想要的是: 菠萝:0.2881 菠萝:0.9099

【问题讨论】:

【参考方案1】:

以下似乎有效

import xml.etree.ElementTree as ET

xml = '''<csData>
<entity name="1" parentEntity="123" type="a"/>

<attribute name="ab" value = ""/>

<attribute name="pineapple" value = "0.9099"/>

<attribute name="ac" value = "" />

<entity name="0" parentEntity="234" type="a"/>

<attribute name="ab" value = ""/>

<attribute name="pineapple" value = "0.2881"/>

<attribute name="ac" value = ""/>
</csData>'''

root = ET.fromstring(xml)
values = [e.attrib['value'] for e in root.findall('.//attribute[@name="pineapple"]')]
print(values)

输出

['0.9099', '0.2881']

【讨论】:

以上是关于如何提取具有相同名称的 XML 标记/实体?的主要内容,如果未能解决你的问题,请参考以下文章

如何从元素中具有相同名称的 xml 文件中获取特定值?

为多个子项验证具有相同标记名称的 XML

如何获取具有相同名称的元素并根据 XSLT 中的子节点值对它们进行排序

如何在 PL/SQL 中使用 FOR LOOP 从具有相同标签的 xml clob 中提取值

使用 SAX 解析器,如何解析具有相同名称标签但元素不同的 xml 文件?

如何使用 JDOM 编写和获取具有相同名称的同一级别的所有 xml 元素