【发布时间】:2011-11-17 02:54:06
【问题描述】:
我有一个简单的 XML 文件,如下所示:
<brandName type="http://example.com/codes/bmw#" abbrev="BMW" value="BMW" />BMW</brandName>
<maxspeed>
<value>250</value>
<unit type="http://example.com/codes/units#" value="miles per hour" abbrev="mph" />
</maxspeed>
我想使用 lxml 解析它并获取它的值: 使用brandName,它只需要:
'brand_name' : m.findtext(NS+'brandName')
如果我想进入它的 abbrev 属性。
'brand_name' : m.findtext(NS+'brandName').attrib['abbrev']
使用 maxspeed,我可以通过以下方式获得 maxspeed 的值:
'maxspeed_value' : m.findtext(NS+'maxspeed/value'),
或:
'maxspeed_value' : m.find(NS+'maxspeed/value').text,
现在,我想获取 unit inside 的属性,我尝试了很多不同的方法,但都失败了。大多数时候的错误是:
'NoneType' object has no attribute 'attrib'
我尝试了以下几种方法,但都失败了:
'maxspeed_unit' : m.find(NS+'maxspeed/value').attrib['abbrev'],
'maxspeed_unit' : (m.find(NS+'maxspeed/value'))get('abbrev'),
您能否给我一些提示,为什么它不起作用? 非常感谢!
更新 XML:
<Car xmlns="http://example.com/vocab/xml/cars#">
<dateStarted>2011-02-05</dateStarted>
<dateSold>2011-02-13</dateSold>
<name type="http://example.com/codes/bmw#" abbrev="X6" value="BMW X6" >BMW X6</name>
<brandName type="http://example.com/codes/bmw#" abbrev="BMW" value="BMW" />BMW</brandName>
<maxspeed>
<value>250</value>
<unit type="http://example.com/codes/units#" value="miles per hour" abbrev="mph" />
</maxspeed>
<route type="http://example.com/codes/routes#" abbrev="HW" value="Highway" >Highway</route>
<power>
<value>180</value>
<unit type="http://example.com/codes/units#" value="powerhorse" abbrev="ph" />
</power>
<frequency type="http://example.com/codes/frequency#" value="daily" >Daily</frequency>
</Car>
【问题讨论】:
-
我刚刚尝试了另一个,但没有成功:'maxspeed_unit' : m.find('.//maxspeed/unit').get('abbrev') 因为我从这里看到:sites.google.com/site/bmaupinwiki/home/programming/python/… 我认为当前元素是maxspeed/value,所以在里面找不到maxspeed/unit。但是我不知道如何让它回到一个级别,所以我尝试了.//,但它没有工作。
标签: python lxml elementtree