«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как игнорировать пространства имен XML при использовании методов «find» и «findall» ElementTree в Python?

Как игнорировать пространства имен XML при использовании методов «find» и «findall» ElementTree в Python?

Опубликовано 8 ноября 2024 г.
Просматривать:134

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

Игнорирование пространства имен 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