Python XML解析期间出错

Python XML解析期间出错,python,xml,Python,Xml,我正在尝试进行XML解析并获取文件名和文件路径的数据,但遇到以下错误,有人能帮我找出原因和解决方法吗 输入XML:- <?xml version="1.0" ?> <contents> <build> <name>modem</name> <role>modem</role> <chipset>mms1234</chipset>

我正在尝试进行XML解析并获取
文件名
文件路径
的数据,但遇到以下错误,有人能帮我找出原因和解决方法吗

输入XML:-

<?xml version="1.0" ?>
    <contents>
    <build>
      <name>modem</name>
      <role>modem</role>
      <chipset>mms1234</chipset> 
    </build>
    <build>
      <name>boot</name>
      <role>boot</role>
      <chipset>ms1234</chipset>
      <device_programmer minimized="true">
        <file_name>prog_emmc_house_4567_ddr.elf</file_name>
        <file_path>images/comPkg/Msm4567Pkg/Bin64/</file_path>
      </device_programmer>
      <flash_programmer minimized="true">
      </flash_programmer>
    </build>
    </contents>
错误:-

Traceback (most recent call last):
  File "script.py", line 37, in <module>
    file_name = device_programmer.get('file_name')
AttributeError: 'NoneType' object has no attribute 'get'
回溯(最近一次呼叫最后一次):
文件“script.py”,第37行,在
file\u name=device\u programmer.get('file\u name'))
AttributeError:“非类型”对象没有属性“get”

来自文档:

findall()只查找带有标记的元素,这些标记是当前元素的直接子元素。Element.find()查找带有特定标记的第一个子元素,Element.text访问元素的文本内容。get()访问元素的属性:

这就是为什么

device_programmer = root.find("device_programmer")
返回
None
,因为
根目录下没有
device\u编程器
元素

您可能应该使用XPath语法:

device_programmer = root.find("//device_programmer")

由于
device\u programmer
不是根元素的直接子元素,因此需要在开头添加
/
表示XPath与上下文元素(本例中为根元素)相关,
/
子体或self
轴的缩写语法:

device_programmer = root.find(".//device_programmer")
与属性不同,
文件名
文件路径
设备程序员
的直接子级,因此需要使用
查找('element_name')
来获取它们:

file_name = device_programmer.find('file_name')
print file_name.text
file_path = device_programmer.find('file_path')
print file_path.text

在根目录下的build[2]Second
build
标记中的
[2]
是什么。上面的xml只是一个例子,它不必位于第二位,它可以位于xml中的任何位置,需要更通用的解决方案。我将其更改为检查所有
设备\程序员
节点,无论它们出现在何处。它是否适用于您,它抛出一个错误
raise SyntaxError(“无法在元素上使用绝对路径”)SyntaxError:cannot use absolute path on element
file_name = device_programmer.find('file_name')
print file_name.text
file_path = device_programmer.find('file_path')
print file_path.text