当前位置: 首页 > 知识库问答 >
问题:

Python将xml转换为列表

张宝
2023-03-14

我有以下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"/>
  ...

我想得到一个分别位于名称“xyz”和“abc”之后的所有单词的列表,例如xyz=[word1,word2,word3,…]abc=[word4,word5,word6,…]

我尝试了以下解决方案:

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

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

for child in root:
    words.append(child.findall(?!))
print(words)

但我不知道如何引用name=xyz的父对象,然后提取子对象的单词。

谢谢你的帮助!!

共有2个答案

商业
2023-03-14

你可以选择:

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']}

这将遍历树和子节点,并将相应的值添加到dict结果中
借助邮政编码,它甚至可能更短:

result = dict(zip((cnode.get('name') for cnode in tree.findall('cnode')), \
            [[pnode.get('name') for pnode in cnode.findall('pnode')] \
                for cnode in tree.findall('cnode')]))
print(result)
戴霖
2023-03-14

首先,您应该修复演示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
 类似资料:
  • 问题内容: 我在使用Python将XML文件转换为CSV时遇到很多麻烦。我看过很多论坛,都尝试过lxml和xmlutils.xml2csv,但是我无法使其正常工作。这是来自Garmin GPS设备的GPS数据。 这是我的XML文件的样子,当然是缩短了: 我的大型XML文件中有几个trk标记,但我可以设法将它们分开-它们代表GPS设备上的不同“段”或行程。我想要的只是一个CSV文件,它绘制了以下内容

  • 问题内容: 我在SO上看到许多问题,询问将XML转换为JSON的方法,但我对采用其他方法感兴趣。是否有用于将JSON转换为XML的python库? 编辑: 什么都没有马上回来,所以我继续写了一个脚本来解决这个问题。 Python已经允许您将JSON转换为本地dict(使用或在版本2.6以下的中,),因此我编写了一个库,可将本地dict 转换为XML字符串。 https://github.com/q

  • XML输入文件: XML输入文件转换为XML输出文件。将XML输入文件的firstName、middleName和lastName标签合并为XML Ouput文件的name标签,将XML输入文件的address1、address2、city、state和pincode标签合并为XML Ouput文件的address标签。 我几乎转换了代码,但我在这里与empId作斗争。我已经在XSLT文件中手动输

  • 问题内容: 我在具有两列mvv和count的数据帧上工作。 我想获得两个包含mvv值和计数值的列表。就像是 因此,我尝试了以下代码:第一行应返回一个python行列表。我想看第一个值: 但是我在第二行收到一条错误消息: AttributeError:getInt 问题答案: 瞧,为什么您这样做的方式行不通。首先,您尝试从行类型获取整数,collect的输出如下所示: 如果您采取这样的做法: 您将获

  • 但我得到第二行的错误消息: AttributeError:getInt

  • 我想将一个XML字符串转换为List。 逻辑需要通用。只应将记录的XPath作为输入。有时,这可以是任何类型的数据。 我尝试了internet帮助,但由于不熟悉XML解析,无法获得通用解决方案。 输入字符串 需要输出列表