我在XML文件下面有示例,我正在尝试生成以下JSON,但我不打算预期结果,它只在字典中添加一个文档。
Sample Input XML:
<results status="passed">
<num-records>2</num-records>
<records>
<volume-info>
<flexible-volume-info>
<agg-name>aggr1_split</aggregate-name>
</flexible-volume-info>
<volume-name>volume1</volume-name>
<volume-size>
<actual-size>44</actual-volume-size>
<afs-avail>90</afs-avail>
</volume-size>
</volume-info>
<volume-info>
<flexible-volume-info>
<agg-name>aggr2_split</aggregate-name>
</flexible-volume-info>
<volume-name>volume2</volume-name>
<volume-size>
<actual-size>10</actual-volume-size>
<afs-avail>14</afs-avail>
</volume-size>
</volume-info>
</records>
</results>
预期产出: { &#34; agg-name&#34;:&#34; aggr1_split&#34;, &#34; volume-name&#34;:&#34; volume1&#34;, &#34;实际大小&#34;:&#34; 44&#34; }, { &#34; agg-name&#34;:&#34; aggr2_split&#34;, &#34;卷名&#34;:&#34;卷2&#34;, &#34;实际大小&#34;:&#34; 10&#34; }
Sample code:
result = {}
for child in root.iter("records"):
result['agg-name'] = child.find('volume-info/flexible-volume-info/agg-name').text
result['volume-name'] = child.find('volume-info/volume-name').text
result['actual-size'] = child.find('volume-info/volume-size/actual-size').text
print result
答案 0 :(得分:0)
您的预期输出将是包含多个相同键的字典,这是不可能的。您需要为循环的每次迭代选择不同的键,或者更好的是还有一个词典列表:
[{'agg-name': 'aggr1_split', 'volume-name': 'volume1', 'actual-size': '44'}, {'agg-name': 'aggr2_split', 'volume-name': 'volume2', 'actual-size': '10'}]
这会给你:
.col-
您的XML格式也很糟糕,开放和结束标记并不总是匹配。