我想用python使用lxml解析XML文件,但在基本尝试中得到一个错误。我使用this post和the lxml tutorials来引导。python:与基本的XML解析错误(使用lxml)
我的XML文件基本上是从下面记录内置(我修剪下来,使其更易于阅读):
from lxml import etree
d = etree.parse("myfile.xml")
for host in d.findall("host"):
aa = host.find("hostnames/hostname")
print aa.attrib["name"]
我:
<?xml version="1.0" ?>
<?xml-stylesheet href="file:///usr/share/nmap/nmap.xsl" type="text/xsl"?>
<nmaprun scanner="nmap" args="nmap -sV -p135,12345 -oX 10.232.0.0.16.xml 10.232.0.0/16" start="1340201347" startstr="Wed Jun 20 16:09:07 2012" version="5.21" xmloutputversion="1.03">
<host>
<hostnames>
<hostname name="host1.example.com" type="PTR"/>
</hostnames>
</host>
</nmaprun>
我通过这个复杂的脚本运行在print
行上获得AttributeError: 'NoneType' object has no attribute 'attrib'
。 我检查了d
,host
和aa
的值,它们都被定义为元素。
如果这是明显的事情(可能是),我们会表示歉意。
编辑:我加入了XML文件的文件头的要求(我仍然读和重读的答案:))
谢谢!
有'aa'是'NoneType'意味着'find' WASN无法找到任何东西。因此,这与XML特定代码中的错误*不同,因为它是(1)稍微错误的搜索,以及(2)在处理lxml库的_output时缺少错误检查。 –
另外 - 当你说“根据下面的记录构建”时,我认为这意味着你将把事情抛出去;即。有一个根,一个标题,&c。你没有透露。这些东西很重要;请确保您至少告诉我们您的文档的根源是什么样子。 –
@Charles Duffy:对不起,我更新了XML文件。发现是成功的(从没有返回错误的意义上说,唯一的错误就是在打印中)。当打印“aa”时,我得到一堆与文件相匹配的元素,它是不工作的属性部分。 – WoJ