Lxml findall SyntaxError: ungültiges Prädikat

Ich versuche, Elemente in xml mit xpath zu finden. Das ist mein Code:

utf8_parser = etree.XMLParser(encoding='utf-8') root = etree.fromstring(someString.encode('utf-8'), parser=utf8_parser) somelist = root.findall("model/class[*/attributes/attribute/@name='var']/@name") 

Xml in someString sieht aus wie:

 <?xml version="1.0" encoding="UTF-8"?> <model> <class name="B" kind="abstract"> <inheritance> <from name="A" privacy="private" /> </inheritance> <private> <methods> <method name="f" type="int" scope="instance"> <from name="A" /> <virtual pure="yes" /> <arguments></arguments> </method> </methods> </private> <public> <attributes> <attribute name="var" type="int" scope="instance"> </attribute> </attributes> </public> </class> </model> 

Wenn ich mit findall ich diesen Fehler:

 raise SyntaxError("invalid predicate") SyntaxError: invalid predicate 

Ich habe versucht, xpath anstelle von findall zu benutzen. Das Skript läuft ohne Fehler, aber der somelist ist leer. Was mache ich falsch?

One Solution collect form web for “Lxml findall SyntaxError: ungültiges Prädikat”

Umschalten von xpath() zu findall() ist keine Lösung. Letzteres unterstützt nur die Untermenge von XPath 1.0-Ausdruck (kompatibel zu xml.etree.ElementTree 's XPath-Unterstützung ), und dein versuchter Ausdruck ist ein Teil der nicht unterstützten Teilmenge.

Das eigentliche Problem ist, dass die root Variable bereits auf das model Element verweist, also musst du in deinem XPath noch kein "model" erwähnen:

 somelist = root.xpath("class[*/attributes/attribute/@name='var']/@name") 
  • Xpath analysiert die ganze Seite, wenn ich mich nicht an
  • Wie richte ich XPath-Abfrage für HTML-Parsing ein?
  • Holen Sie den zweiten Elementtext mit XPath?
  • Erhalten Sie alle sichtbaren Text von einer Webseite mit Selen
  • Wie kann ich HTML mit html5lib analysieren und das geparste HTML mit XPath abfragen?
  • Erstellen von Loop, um Tabellendaten in scrapy / python zu analysieren
  • Wie ordnungsgemäß verwenden Regeln, beschränken_xpaths zu crawlen und analysieren URLs mit scrapy?
  • Lxml find <div> mit id = 'post- [0-9] *' [duplizieren]
  • Extrahieren von Informationen aus einer Tabelle auf einer Website mit python, LXML & XPATH
  • Verwalten von Anführungszeichen in XPath (lxml)
  • Wie füge ich ein Attribut zu einem Tag hinzu, das mit xpath in lxml in Python gefunden wurde?
  • Python ist die beste Programmiersprache der Welt.