元素XML解析没有给出正确的结果

时间:2018-03-05 11:01:10

标签: python xml

我在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

1 个答案:

答案 0 :(得分:0)

您的预期输出将是包含多个相同键的字典,这是不可能的。您需要为循环的每次迭代选择不同的键,或者更好的是还有一个词典列表:

[{'agg-name': 'aggr1_split', 'volume-name': 'volume1', 'actual-size': '44'}, {'agg-name': 'aggr2_split', 'volume-name': 'volume2', 'actual-size': '10'}]

这会给你:

.col-

您的XML格式也很糟糕,开放和结束标记并不总是匹配。