Ignorando o namespace XML nos métodos "find" e "findall" do ElementTree
Ao usar o módulo ElementTree para analisar e localizar elementos em documentos XML , os namespaces podem introduzir complexidade. Veja como ignorar namespaces ao usar os métodos "find" e "findall" em Python.
O problema surge quando documentos XML contêm namespaces que podem fazer com que o módulo ElementTree os considere ao pesquisar tags. Isso pode levar a resultados inesperados, conforme demonstrado pelo exemplo fornecido na pergunta:
el1 = tree.findall("DEAL_LEVEL/PAID_OFF") # Return None
el2 = tree.findall("{http://www.test.com}DEAL_LEVEL/{http://www.test.com}PAID_OFF") # Return element
Para ignorar namespaces, a solução é para modificar as tags no documento XML analisado antes de usar os métodos "find" ou "findall". Isso pode ser alcançado usando o método iterparse() do ElementTree:
import io
from xml.etree import ElementTree as ET
# Parse the XML document
it = ET.iterparse(StringIO(xml))
# Iterate over each element and strip the namespace if present
for _, el in it:
_, _, el.tag = el.tag.rpartition("}") # strip ns
# Get the modified root element
root = it.root
# Now, you can search for elements without namespaces
el3 = root.findall("DEAL_LEVEL/PAID_OFF") # Return matching elements
Esta solução modifica as tags no documento analisado, facilitando a localização de elementos sem a necessidade de especificar manualmente o prefixo do namespace para cada tag.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3