Seite 1 von 1

LXML und XPATH mit Variable

Verfasst: Donnerstag 9. September 2010, 21:03
von dougal

Code: Alles auswählen

html_parser = lxml.etree.HTMLParser()
html_doc = lxml.etree.fromstring(res, parser=html_parser)
xpathfilter = "//div[@class='foobar']"
elemente = html_doc.xpath(xpathfilter)
print(elemente)
>>> //div[@class='foobar']
Ich hab hier gerade ein Programm geschrieben und möchte eine HTML-Datei mit XPATH auswerten *fingerkreuze*.

Nun ist es aber so, dass ich die XPath-Anweisung über eine Variable eingebe. Wenn ich das mache, spuckt er mir keinen Elementtree aus, sondern den Inhalt der XPath-Variable. Gebe ich den Inhalt direkt in Xpath ein, klappt alles und ich krieg einen Elementtree Ich finde das komisch. Ist das nicht möglich per Variable die Xpath einzugeben?

Ich nutze Python 3.1

Re: LXML und XPATH mit Variable

Verfasst: Donnerstag 9. September 2010, 21:41
von BlackJack
@dougal: Du meinst wenn Du statt ``html_doc.xpath(xpathfilter)`` dort ``html_doc.xpath("//div[@class='foobar']")`` schreibst, bekommst Du ein anderes Ergebnis? Das kann nicht sein.

Re: LXML und XPATH mit Variable

Verfasst: Donnerstag 9. September 2010, 22:06
von dougal
Ja genau... ich schüttel auch nur mit dem Kopf. Das eine krieg ich die Variable und das zweite mal dann einen Elementtree. *seufz*

Re: LXML und XPATH mit Variable

Verfasst: Donnerstag 9. September 2010, 22:20
von DasIch
Zeig mal den tatsächlichen Code.

Re: LXML und XPATH mit Variable

Verfasst: Freitag 10. September 2010, 01:08
von dougal
Okay, hab den Fehler gefunden. Ich bin nochmal genau die Kette durchgegangen wie die Variable xpathfilter gefüllt wurde. Hintergrund: Die Variable wird aus einer Steuerdatei im XML-Format gefüttert. In der XML-Datei habe ich die XPATH-Anweisung in einen CDATA-Tag reingepackt. Leider habe ich übersehen, dass die Einklammerung von CDATA keine Anführungszeichen beinhalten darf. Und so schickte ich

Anführungszeichen >> "//div[@class='foobar']" << Anführungszeichen zur XPath-Methode. Das war Mist.

Danke trotzdem für die Hilfe.