lxml для разбора html: неверный результат, почему - PullRequest
1 голос
/ 23 января 2012

Вот странная вещь с моим кодом:

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 это []? Это так странно. Почему?

1 Ответ

5 голосов
/ 23 января 2012

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

>>> 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>]
...