ich eine XML-doc, dass ich mit Etree.lxmllxml etree XMLParser unerwünschte Namespace entfernen
<Envelope xmlns="http://www.example.com/zzz/yyy">
<Header>
<Version>1</Version>
</Header>
<Body>
some stuff
<Body>
<Envelope>
Mein Code zu analysieren versuche ist:
path = "path to xml file"
from lxml import etree as ET
parser = ET.XMLParser(ns_clean=True)
dom = ET.parse(path, parser)
dom.getroot()
Wenn ich versuche, dom.getroot zu bekommen() ich bekomme:
<Element {http://www.example.com/zzz/yyy}Envelope at 28adacac>
jedoch nur ich will:
<Element Envelope at 28adacac>
Wenn ich tun
dom.getroot().find("Body")
ich nichts zurückgegeben. Wenn ich jedoch
dom.getroot().find("{http://www.example.com/zzz/yyy}Body")
bin, bekomme ich ein Ergebnis.
Ich dachte, dass die Übergabe von ns_clean = True an den Parser dies verhindern würde.
Irgendwelche Ideen?
body = dom.xpath ('// ns: Körper', namespaces = {'ns': 'http: //www.xxx.com/zzz/yyy'}) PERFEKT! – Mark
XSLT, um alle Namespaces zu entfernen. Genau das, wonach ich gesucht habe, Genie. –
FYI wenn Sie Python3 benutzen, müssen Sie den xslt String zuerst kodieren. dh xslt_doc = ET.parse (io.BytesIO (str.encode (xslt))) – AZhao