【发布时间】:2015-04-25 08:08:19
【问题描述】:
我有一个xml文件如下:
<?xml version="1.0"?>
<max:SyncObject xmlns:max="http://www.ibm.com/max">
<max:ObjectSet>
<max:PARENT action="AddChange">
<max:FIELD1>string</max:FIELD1>
<max:FIELD2>string</max:FIELD2>
<max:FIELD3>string</max:FIELD3>
<max:FIELD4>string</max:FIELD4>
<max:FIELD5>string</max:FIELD5>
<max:FIELD6>string</max:FIELD6>
<max:FIELD7>string</max:FIELD7>
<max:CHILD1 action="Ignored">
<max:CH1FIELD1 action="Ignored">
<max:CH1SUB1>string</max:CH1SUB1>
<max:CH1FIELD2>string</max:CH1FIELD2>
</max:CHILD1>
<max:CHILD2 action="Ignored">
<max:CH2FIELD1>string</max:CH2FIELD1>
</max:CHILD2>
</max:PARENT>
</max:ObjectSet>
</max:SyncObject>
我想要达到的最终结果如下:
{'PARENT': ['FIELD1', 'FIELD2', 'FIELD3', 'FIELD4', 'FILED5', 'FIELD6', 'FIELD7', 'CHILD1', 'CHILD2']}, {'CHILD1': ['CH1FIELD1', 'CH1FIELD2'], 'CHILD2': ['CH2FIELD1'], 'CH1FIELD1':['CH1SUB1']}
所以我尝试了几种不同的方法来从 XML 文件中提取 FIELD1、FIELD2... 标记,同时仍然保持结构,正如您所见,PARENT 字典与其他字典是分开的并包含所有标签正好低于一级。对于子标签也是如此。不需要动作属性,因为这将通过类中的另一种方式指定。
似乎大多数 lxml 和 elementtree 都倾向于从 XML 标签中提取属性,而不是标签本身。
谁能指出我在不带前缀、值或任何属性的情况下提取标签(字段名称)并保留结构的正确方向?
谢谢!
【问题讨论】:
标签: python xml dictionary xml-parsing