Tengo un documento XML que estoy tratando de analizar el uso de Etree.lxmllxml etree XMLParser quitar espacio de nombres no deseada
<Envelope xmlns="http://www.example.com/zzz/yyy">
<Header>
<Version>1</Version>
</Header>
<Body>
some stuff
<Body>
<Envelope>
Mi código es:
path = "path to xml file"
from lxml import etree as ET
parser = ET.XMLParser(ns_clean=True)
dom = ET.parse(path, parser)
dom.getroot()
cuando trato de conseguir dom.getroot() me sale:
<Element {http://www.example.com/zzz/yyy}Envelope at 28adacac>
Sin embargo sólo quiero:
<Element Envelope at 28adacac>
cuando lo haga
dom.getroot().find("Body")
me sale nada volvió. Sin embargo, cuando yo
dom.getroot().find("{http://www.example.com/zzz/yyy}Body")
obtengo un resultado.
Pensé que pasar ns_clean = Verdadero para el analizador evitaría esto.
¿Alguna idea?
body = dom.xpath ('// ns: Body', namespaces = {'ns': 'http: //www.xxx.com/zzz/yyy'}) ¡PERFECTO! – Mark
XSLT para eliminar todos los espacios de nombres. Justo lo que estaba buscando, genio. –
FYI si usa Python3 primero tendrá que codificar la cadena xslt. es decir, xslt_doc = ET.parse (io.BytesIO (str.encode (xslt))) – AZhao