Python将xml转换为lis

2024-05-13 01:01:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下xml数据集:

<cnode desc="" name="xyz"> 
  <pnode name="word1"/> 
  <pnode name="word2"/>
  <pnode name="word3"/>
  ...
<cnode desc="" name="abc"> 
  <pnode name="word4"/> 
  <pnode name="word5"/>
  <pnode name="word6"/>
  ...

我想分别得到name='xyz'和'abc'后面的所有单词的列表,例如xyz=[word1,word2,word3,…]和abc=[word4,word5,word6,…]

我尝试了以下解决方案:

^{pr2}$

但我不知道如何引用名为xyz的父级,然后提取子级的单词。在

谢谢你的帮助!!在


Tags: 数据namexml单词descabcxyzword1
2条回答

您可以选择:

string = """
<nodes>
    <cnode desc="" name="xyz"> 
      <pnode name="word1"/> 
      <pnode name="word2"/>
      <pnode name="word3"/>
     </cnode>
     <cnode desc="" name="abc"> 
      <pnode name="word4"/> 
      <pnode name="word5"/>
      <pnode name="word6"/>
     </cnode>
</nodes>
 """

import xml.etree.ElementTree as etree
xyz=[]
abc=[]

tree = etree.fromstring(string)

result = {}
for node in tree.findall('cnode'):
    name = node.get('name')
    if name not in result.items():
        result[name] = []

    for child in node.findall('pnode'):
        child_name = child.get('name')
        result[name].append(child_name)

print(result)
# {'xyz': ['word1', 'word2', 'word3'], 'abc': ['word4', 'word5', 'word6']}

这将遍历树和子节点,并将相应的值添加到dictresult
zip的帮助下,它甚至可能更短:

^{pr2}$

首先,你应该修复你的演示xml有一个丢失的右引号

我会使用xpath

from lxml import etree

tree = etree.parse('data.xml')
root = tree.getroot()

xyzpnodes = root.xpath(".//cnode[@name='xyz']/pnode")
xyz = [p.attrib["name"] for p in xyzpnodes]

print xyz

相关问题 更多 >