繁体   English   中英

使用python脚本从xml提取属性和某些标记值

[英]Extract attributes and certain tag values from xml using python script

我想解析XML内容并返回仅包含name属性及其值作为字典的字典。 例如:

  <ecmaarray>
   <number name="xyz1">123.456</number>  
   <ecmaarray name="xyz2">  
       <string name="str1">aaa</string>  
       <number name="num1">55</number>  
   </ecmaarray>  
   <strictarray name="xyz3">  
       <string>aaa</string>  
       <number>55</number>  
   </strictarray>  
</ecmaarray>  

输出必须在这样的字典中。

Dict:{ 'xyz1': 123.456, 
       'xyz2': {'str1':'aaa', 'num1': '55'},
       'xyz3': ['aaa','55']
     }

有人可以为此建议递归解决方案吗?

假设情况如下:

<strictarray name="xyz4">
    <string>aaa</string>
    <number name="num1">55</number>
</strictarray>

不可能,这是使用lxml的示例代码:

from lxml import etree


tree = etree.parse('test.xml')

result = {}
for element in tree.xpath('/ecmaarray/*'):
    name = element.attrib["name"]
    text = element.text
    childs = element.getchildren()

    if not childs:
        result[name] = text
    else:
        child_dict = {}
        child_list = []
        for child in childs:
            child_name = child.attrib.get('name')
            child_text = child.text
            if child_name:
                child_dict[child_name] = child_text
            else:
                child_list.append(child_text)

        if child_dict:
            result[name] = child_dict
        else:
            result[name] = child_list


print result

打印:

{'xyz3': ['aaa', '55'], 
 'xyz2': {'str1': 'aaa', 'num1': '55'}, 
 'xyz1': '123.456'}

您可能需要改进代码-这只是去哪里的提示。

希望能有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM