Получить родительский XML-элемент с помощью XML ElementTree

Есть ли простой способ получить доступ к родительскому элементу элемента

Например:

<A>
   <B id = "254">
      <Z>12.34</Z>
      <C>Lore</C>
      <D>9</D>
   </B>
</A>

За <B> хочу получить <A> и за <Z>, <C>, <D> хочу получить <B>

Похоже, приговор не окончен For I want to get and for , , I want to get

Gilles Quénot 13.04.2023 14:26

Извините, забыл вставить, теперь надо добавить

JME 13.04.2023 14:29

Вы тоже забыли тег python -_-

Gilles Quénot 13.04.2023 15:56

Разве тег elementtree не указывает на Python?!

JME 13.04.2023 16:14

Похоже на дубликат stackoverflow.com/q/2170610/407651

mzjn 13.04.2023 16:14
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
5
102
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете попробовать использовать сокращенный синтаксис XPath ...

Это будет что-то вроде:

.//B/..

(Он начинается с ., потому что ElementTree не допускает абсолютного пути к элементу.)

Пример:

import xml.etree.ElementTree as ET

xml = """
<A>
   <B id = "254">
      <Z>12.34</Z>
      <C>Lore</C>
      <D>9</D>
   </B>
</A>
"""

root = ET.fromstring(xml)

for elem_name in ['B', 'Z']:
    # Example xpath: .//Z/..
    print(f"Parent of '{elem_name}': " + root.find(f".//{elem_name}/..").tag)

Это печатает:

Parent of 'B': A
Parent of 'Z': B

Если вы можете использовать lxml, у него есть удобный метод getparent() (плюс полная поддержка xpath 1.0 и поддержка расширений exslt).

Другие вопросы по теме