2012-01-23 1 views
1

Вот странная вещь с моим кодом:LXML для разбора HTML: неправильный результат, почему

import lxml.html 
myxml=''' 
<cooperate> 
    <job DecreaseHour="1" table="tpa_radio_sum"> 
    </job> 

    <job DecreaseHour="2" table="tpa_radio_sum">         
    </job> 


    <job DecreaseHour="3" table="tpa_radio_sum"> 
    </job> 
</cooperate> 
''' 
root=lxml.html.fromstring(myxml) 
nodes1=root.xpath('//job[@DecreaseHour="1"]') 
nodes2=root.xpath('//job[@table="tpa_radio_sum"]')  
print "nodes1=",nodes1 
print "nodes2=",nodes2 

Что я получаю:
nodes1=[] и

nodes2=[ Element job at 0x1241240,  
Element job at 0x1362690,  
Element job at 0x13626c0] 

Почему nodes1 является []? Это так странно. Зачем ?

ответ

5

Поскольку вы используете HTML Parser все атрибуты становятся строчными буквами:

>>> root.xpath("//job")[0].attrib 
{'table': 'tpa_radio_sum', 'decreasehour': '1'} 

Вы можете использовать реальные XML-парсер:

>>> import lxml.etree 
>>> root = lxml.etree.fromstring(myxml) 
>>> root.xpath('job[@DecreaseHour="1"]') 
[<Element job at 0x293daa8>] 
Смежные вопросы