"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como ignorar namespaces XML ao usar os métodos "find" e "findall" do ElementTree em Python?

Como ignorar namespaces XML ao usar os métodos "find" e "findall" do ElementTree em Python?

Publicado em 2024-11-08
Navegar:186

How to Ignore XML Namespaces when Using ElementTree\'s \

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.

Tutorial mais recente Mais>

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