[(elem.text,elem.getparent().xpath('values/value/text()'))
for elem in tree.getiterator(tag='name') if elem.text.startswith('v_')]
выходы
[('v_683', []),
('v_684', []),
('v_684',
['Alternative 1', 'Alternative 2', 'Alternative 3', 'Alternative 4'])]
elem
является элементом name
. Таким образом, чтобы получить связанные значения, вы можете сначала найти его родителя (variable
), затем найти values
child, а затем value
subchild элементов.
Альтернатива, которая удаляет вызов getparent
, но использует немного более сложный XPath:
[(elem.text,elem.xpath('following-sibling::values/value/text()')) for elem in tree.getiterator(tag='name') if elem.text.startswith('v_')]
following-sibling::
говорит xpath
сгенерировать всех братьев и сестер name
.
following-sibling::values
говорит xpath
генерировать всех братьев и сестер из name
, которые являются values
элементами.