Python XML解析期间出错
我正在尝试进行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 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]Secondbuild
标记中的[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