У меня есть файл XML, 'пример. xml', формат которого похож на следующий:
<ParentOne> <!-- Comment 1-->
<SiblingOneA>This is Sibling One A</SiblingOneA>
<SiblingTwoA> <!-- Comment -->
<ChildOneA>Value of child one A <!-- Comment 2--></ChildOneA>
<!-- <break>Comment between tags</break>-->
<ChildTwoA>Value of child two A</ChildTwoA>
<ChildThreeA>Value of child three A</ChildThreeA>
<!-- <break>Another comment between tags</break>-->
<ChildFourA>Value of child four A</ChildFourA>
</SiblingTwoA>
</ParentOne>
Как видите, есть некоторые комментарии, соответствующие определенным тегам и другие комментарии, которые находятся между тегами. Я пытаюсь написать что-то, что получит комментарии, которые находятся между тегами и его местоположением.
Например, я хотел бы найти способ, которым мне говорят, что первый "разрыв" комментарий находится между тегами ChildOneA и ChildTwoA. Это мой код:
from lxml import etree
doc = etree.parse('example.xml')
root = doc.getroot()
for tag in doc.xpath('//*'):
comment = tag.xpath('{0}/comment()'.format(doc.getpath(tag)), namespaces=root.nsmap)
print(comment)
# Do some other stuff
Этот код возвращает:
[<!-- Comment 1-->]
[]
[<!-- Comment -->, <!-- <break>Comment between tags</break>-->, <!-- <break>Another comment between tags</break>-->]
[<!-- Comment 2-->]
[]
[]
[]
Я понимаю, почему 3-й элемент в списке, который соответствует SiblingTwoA, возвращает 3 комментария, как 2 перерыва комментарии технически соответствуют этому тегу. Однако есть ли способ узнать, что первый из этих комментариев прерывания находится между тегами ChildOneA и ChildTwoA, а второй - между тегами ChildThreeA и ChildFourA?
Рад уточнить, если это необходимо, так как это может быть немного запутанным, чтобы понять.