Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python,XML结构到字典_Python_Xml_Dictionary_Xml Parsing - Fatal编程技术网

Python,XML结构到字典

Python,XML结构到字典,python,xml,dictionary,xml-parsing,Python,Xml,Dictionary,Xml Parsing,我有一个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&l

我有一个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']}
因此,我尝试了几种不同的方法来提取
FIELD1
FIELD2
。。。XML文件中的标记,同时仍保持结构,如您所见,
PARENT
字典与其他字典是分开的,它只包含下面一个级别的所有标记。对于子标签也是如此。不需要操作attrib,因为这将由类中的其他方法指定

似乎大多数lxml和elementtree都是为了从XML标记中提取属性,而不是标记本身

有没有人能告诉我在没有前缀、值或任何属性的情况下提取标记(字段名)的正确方向,并保留结构


谢谢

首先,您的XML数据格式不正确,缺少结束语

要将其转换为python数据结构,请使用:

导入xmltodict
data=”“”
一串
一串
一串
一串
一串
一串
一串
一串
一串
一串
"""
d=xmltodict.parse(数据,
进程名称空间=True,
名称空间={'http://www.ibm.com/max“:无})
打印d

谢谢,你能解释一下它返回什么以及如何操作吗?@txDMTN当然,它返回一个
OrderedDict
结构,基本上你可以像普通dict一样操作它,但它保留了顺序。
import xmltodict

data = """<?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:CH1FIELD1>
      </max:CHILD1>
      <max:CHILD2 action="Ignored">
        <max:CH2FIELD1>string</max:CH2FIELD1>
      </max:CHILD2>
    </max:PARENT>
  </max:ObjectSet>
</max:SyncObject>"""

d = xmltodict.parse(data, 
                    process_namespaces=True, 
                    namespaces={'http://www.ibm.com/max': None})
print d