XHTML-Namespace-Probleme mit cssselect in lxml

Ich habe Probleme mit cssselect mit einem XHTML (oder XML mit Namespace). Obwohl die Dokumentation sagt, wie man Namensraum in csselect verwendet, verstehe ich es nicht: cssselect namespaces

Meine Eingabe XHTML String:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Teststylesheet</title> <style type="text/css"> /*<![CDATA[*/ ol{margin:0;padding:0} /*]]>*/ </style> </head> <body> </body> </html> 

Meine Pythonschrift:

 parser = etree.XMLParser() tree = etree.fromstring(xhtmlstring, parser).getroottree() for style in CSSSelector("style")(tree): print "HAVE CSS!" 

Das Python-Skript druckt kein Have CSS! . Mit dem etree.HTMLParser anstelle von etree.XMLParser funktioniert, aber ich möchte wirklich den XMLParser verwenden und alles (Namespace, Struktur) des XHTML behalten.

Kann mir jemand mit diesem Namespace-Problem helfen?

One Solution collect form web for “XHTML-Namespace-Probleme mit cssselect in lxml”

Die doc-Zeichenfolge für cssselect.CSSSelector (Version 2.0) zeigt die Verwendung von Namespaces:

 class CSSSelector(etree.XPath): """ ... To use CSS namespaces, you need to pass a prefix-to-namespace mapping as ``namespaces`` keyword argument:: >>> rdfns = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#' >>> select_ns = cssselect.CSSSelector('root > rdf|Description', ... namespaces={'rdf': rdfns}) >>> rdf = etree.XML(( ... '<root xmlns:rdf="%s">' ... '<rdf:Description>blah</rdf:Description>' ... '</root>') % rdfns) >>> [(el.tag, el.text) for el in select_ns(rdf)] [('{http://www.w3.org/1999/02/22-rdf-syntax-ns#}Description', 'blah')] """ 

Wenn du das ausprobiert hast, aber deine Version von cssselect.CSSSelector hat keinen namespaces Parameter, dann muss deine Version von lxml evtl. aktualisiert werden.

  • Python-Berichtszeile / Spalte des Ursprungs des XML-Knotens
  • Onchange Funktionen auf booleschen Feldern in odoo 8
  • Wie kann lxml einige XML gegen eine XSD-Datei validieren, während auch ein Inline-Schema geladen wird?
  • QWebException: "'KeinType' Objekt ist bei der Auswertung nicht aufrufbar
  • Lesen von XML-Datei und Abrufen der Attribute Wert in Python
  • Analysieren Sie mehrere XML-Deklarationen in einer Datei mit Hilfe von lxml.etree.iterparse
  • Textdatei Erstellung Problem, wo neue Zeilen erstellt, wenn nicht wirklich EOL
  • PYTHON: Hinzufügen von Wurzelknoten zu einem XML
  • So aktualisieren Sie die XML-Datei mit lxml
  • Die Grenze von Element Tree auf xpath
  • Python xml.etree.ElementTree Verzeichnis acess
  • Python ist die beste Programmiersprache der Welt.