Я новичок в этом, поэтому, пожалуйста, будьте терпеливы.Поиск родителя от дочернего элемента в XML с использованием python
Использование ETree и Python 2.7, я пытаюсь проанализировать большой файл XML, который я не создавал. В принципе, файл содержит группы вокселей, содержащихся в большом объеме. Общий формат:
<things>
<parameters>
<various parameters>
</parameters>
<thing id="1" comment="thing1">
<nodes>
<node id="1" x="1" y="1" z="1"/>
<node id="2" x="2" y="2" z="2"/>
</nodes>
<edges>
<edge source="1" target="2"/>
</edges>
</thing>
<thing id="N" comment="thingN">
<nodes>
<node id="3" x="3" y="3" z="3"/>
<node id="4" x="4" y="4" z="4"/>
</nodes>
<edges>
<edge source="3" target="4"/>
</edges>
</thing>
<comments>
<comment node="1" content="interesting feature"/>
<comment node="4" content="interesting feature"/>
</comments>
</things>
А «узел» содержит координаты воксела и «вещь» представляет собой группу вокселей. «Комментарии» используются для выделения интересующих узлов.
я могу найти атрибуты отдельных узлов «ид» с помощью команды поиска, например:
for elem in things.iterfind('thing/nodes/node[@id="221"]'):
x = int(elem.get('x'))
Я хотел бы быть в состоянии определить «вещь идентификатор», к которому любой «идентификатор узла» принадлежит (например, узел 3 находится в веществе N). Я знаю, что я могу сделать это, используя цикл for, итерацию через вещи, а затем узлы, но я предполагаю, что должен быть какой-то способ сделать это проще, найдя родителя из дочернего элемента.
Я пробовал все варианты:
elem.find(..)
, что я могу думать, но я получаю либо
«Отсутствует тип» или SyntaxError ("не может использовать абсолютный путь на элементе «)
Я попробовал команду LXML GetParent() тоже, как это было предложено в ответ на аналогичный запрос здесь: Get parent element after using find method (xml.etree.ElementTree) но не Ava ил.
Должен ли я определять классы в этом файле, чтобы иметь полный доступ к инструментам XPath?
Проверить эту нить http://stackoverflow.com/questions/2170610/access-elementtree- узел-родитель-узел – ate50eggs