如何使用 python 从 XML 创建嵌套字典?
Posted
技术标签:
【中文标题】如何使用 python 从 XML 创建嵌套字典?【英文标题】:How to create nested dictionary from XML using python? 【发布时间】:2019-11-29 05:50:10 【问题描述】:我正在读取一个 XML 文件并将它的一部分写入 YAML 文件。 例如,在这个 xml 文件中,
<project>
<scm class="hudson.scm.NullSCM"/>
<assignedNode>bo1php</assignedNode>
<canRoam>false</canRoam>
<disabled>false</disabled>
<blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
<blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>
<triggers>
<hudson.triggers.TimerTrigger>
<spec>H * * * *</spec>
</hudson.triggers.TimerTrigger>
</triggers>
<concurrentBuild>false</concurrentBuild>
<builders>
我只想读取 disabled 值和 spec 值并将其写入 YAML 文件,如下所示: 预期输出:
disabled: 'false'
name: Cancellation_CMT_Tickets
triggers:
hudson.triggers.TimerTrigger:
spec: H * * * *
只有当我的结果字典是这种格式时
d = "trigger":"hudson.triggers.TimerTrigger": "spec": "H * * * *"
我可以将它转储到上述格式的 yaml 文件中。我当前的代码如下所示,搜索键作为运行时参数传递
import os, xml.etree.ElementTree as ET
import yaml,sys
tree = ET.parse('test.xml')
root = tree.getroot()
d =
def xmpparse(root,searchkey):
for child in root:
if child.tag == searchkey:
d[child.tag]=child.text
elif len(child):
xmpparse(child,searchkey)
for i in sys.argv:
xmpparse(root,i)
print(yaml.dump(d, default_flow_style=False))
当前输出:
disabled: 'false'
spec: H * * * *
任何帮助将不胜感激。提前致谢!
【问题讨论】:
对 YAML 了解不多(或任何...),但如果有帮助,我可以将您的字典转换为正确的格式(使用 lxml 库)。 我想要一个嵌套字典,仅用于我需要从 XML 中获取的条目。你能帮我解决这个问题吗?在进行递归操作时,它应该开始将值放入嵌套字典中 如果下面的答案有效,请告诉我。 【参考方案1】:我相信这至少应该解决嵌套字典的问题;它基于关于如何形成嵌套字典的各种答案(可能还有其他方法):
import lxml.html as LH
class NestedDict(dict):
def __missing__(self, key):
self[key] = NestedDict()
return self[key]
data = [your xml above]
doc = LH.fromstring(data)
for i in doc:
if i.tag == 'triggers':
for child in i.getchildren():
d = NestedDict()
d[i.tag][child.tag][child[0].tag] = i.text_content().strip()
print(d)
输出:
'triggers': 'hudson.triggers.timertrigger': 'spec': 'H * * * *'
【讨论】:
我忘了提一点,我的代码应该以这样的方式工作,它可以对作为运行时参数传递的 searchKey 进行任何深度。看起来您的解决方案只适用于这个 XML 文件。不过我还没有尝试过。但是 d[i.tag][child.tag][child[0].tag] 在这里你只是用 3 个键进行输入以上是关于如何使用 python 从 XML 创建嵌套字典?的主要内容,如果未能解决你的问题,请参考以下文章