Игнорирование пространства имен XML в методах ElementTree «find» и «findall»
При использовании модуля ElementTree для анализа и поиска элементов в XML-документах , пространства имен могут усложнить работу. Вот как можно игнорировать пространства имен при использовании методов «find» и «findall» в Python.
Проблема возникает, когда XML-документы содержат пространства имен, из-за которых модуль ElementTree может учитывать их при поиске тегов. Это может привести к неожиданным результатам, как показано в примере, приведенном в вопросе:
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
Чтобы игнорировать пространства имен, решением является изменить теги в проанализированном XML-документе перед использованием методов «find» или «findall». Этого можно добиться с помощью метода iterparse() элемента 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
Это решение изменяет теги в анализируемом документе, упрощая поиск элементов без необходимости вручную указывать префикс пространства имен для каждого тега.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3