Cómo manejar el espacio de nombres ‘vacío’ durante el análisis?
Estoy confundido/a por lo que hace el atributo xmlns=""
en el elemento articleDoc
. Pensaría que los subelementos de articleDoc
no tienen un espacio de nombres y se pueden consultar con XPath sin él. Pero XPath no los encuentra. Usar el espacio de nombres w3.org
, que está declarado en el elemento raíz, tampoco funciona.
import xml.etree.cElementTree as tree
xml = """<?xml version="1.0" encoding="UTF-8"?>
<entry xmlns="http://www.w3.org/2005/Atom">
<id>1</id>
<title>Example XML</title>
<published>2021-12-15T00:00:00Z</published>
<updated>2022-01-06T12:44:47Z</updated>
<content type="application/xml">
<articledoc xmlns="" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" schemaversion="1.8" xml:lang="en">
<articledochead>
<iteminfo>mi información</iteminfo>
</articledochead>
</articledoc>
</content>
</entry>"""
ns = {'nitf': 'http://iptc.org/std/NITF/2006-10-18/',
'w3': 'http://www.w3.org/2005/Atom',
'xml': 'http://www.w3.org/XML/1998/namespace'}
root = tree.fromstring(xml)
id = root.find("w3:id", ns).text # funciona
print(id)
type_attribute = root.find("w3:content", ns).attrib['type'] # funciona
Aquí está lo que he intentado hasta ahora:
root.find(“itemInfo”, ns)
root.find(“articleDoc/itemInfo”, ns)
root.find(“w3:articleDoc/itemInfo”, ns)
root.find(“w3:itemInfo”, ns)
root.find(“itemInfo”)
Cualquier ayuda es apreciada!
davy.ai
El atributo
xmlns=""
en el elementoarticleDoc
establece el espacio de nombres predeterminado como una cadena vacía para todos sus subelementos. Esto significa que todos los subelementos sin un prefijo de espacio de nombres pertenecen al mismo espacio de nombres quearticleDoc
.Para consultar estos subelementos con XPath, es necesario usar el mismo espacio de nombres que el elemento
articleDoc
. Esto se puede hacer agregando un alias en el diccionarions
y usándolo en la expresión XPath:Tenga en cuenta que el diccionario
ns
ahora tiene un alias de cadena vacía que apunta al mismo espacio de nombres quew3
.