LXML und XPATH mit Variable

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
dougal
User
Beiträge: 12
Registriert: Samstag 25. Juli 2009, 16:50

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
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.
dougal
User
Beiträge: 12
Registriert: Samstag 25. Juli 2009, 16:50

Ja genau... ich schüttel auch nur mit dem Kopf. Das eine krieg ich die Variable und das zweite mal dann einen Elementtree. *seufz*
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Zeig mal den tatsächlichen Code.
dougal
User
Beiträge: 12
Registriert: Samstag 25. Juli 2009, 16:50

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