我有以下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的父对象,然后提取子对象的单词。
谢谢你的帮助!!
你可以选择:
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)
首先,您应该修复演示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解析,无法获得通用解决方案。 输入字符串 需要输出列表