Получить все элементы одного уровня с указанным узлом c - PullRequest
0 голосов
/ 14 января 2020

У меня есть следующий пример. xml file:

<ParentOne>
   <SiblingOneA>This is Sibling One A</SiblingOneA>
   <SiblingTwoA>
      <ChildOneA>Value of child one A</ChildOneA>
      <ChildTwoA>Value of child two A</ChildTwoA>
      <ChildThreeA>Value of child three A</ChildThreeA>
      <ChildFourA>Value of child four A</ChildFourA>
   </SiblingTwoA>
</ParentOne>

Я бы хотел получить теги и значения для всех родственных элементов в узел ChildThreeA. Поэтому я хотел бы, чтобы выходные данные были примерно такими, как показано ниже (или что-то похожее):

ChildOneA = значение дочернего элемента один A

ChildTwoA = значение дочернего элемента два A

ChildFourA = Значение дочернего четвертого A

Я видел много примеров, подобных этому , который использует XPath, но я надеялся использовать простую библиотеку, которая можете вернуть это для меня.

Например, я использую getprevious().tag, getprevious().text, getnext().tag и getnext().text, чтобы вернуть предыдущий и следующий теги и тексты из рассматриваемого узла, но это будет только возвращать смежные элементы, а не все братья и сестры.

1 Ответ

1 голос
/ 14 января 2020

Вы можете попробовать:

from io import StringIO
from xml.etree import ElementTree as ET

data = """<ParentOne>
   <SiblingOneA>This is Sibling One A</SiblingOneA>
   <SiblingTwoA>
      <ChildOneA>Value of child one A</ChildOneA>
      <ChildTwoA>Value of child two A</ChildTwoA>
      <ChildThreeA>Value of child three A</ChildThreeA>
      <ChildFourA>Value of child four A</ChildFourA>
   </SiblingTwoA>
</ParentOne>"""

tree = ET.parse(StringIO(data))
root = tree.getroot()
sibling_two = root.find('SiblingTwoA')
for children in sibling_two:
    print(f'{children.tag} = {children.text}')

Дает вывод :

ChildOneA : Value of child one A
ChildTwoA : Value of child two A
ChildThreeA : Value of child three A
ChildFourA : Value of child four A
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...