Skip to main content
 首页 » 编程设计

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

2025年05月04日10fff_TT

我想解析一个 XML 内容并返回一个字典,其中只包含名称属性及其值作为字典。例如:

  <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'} 

您可能想要改进代码 - 它只是关于去哪里的提示。

希望对您有所帮助。