Как установить индекс массива в выражении XPATH в пакете Python lxml - PullRequest
0 голосов
/ 28 августа 2018

Я пытаюсь найти большой XML с помощью библиотеки Python 'lxml'.

Структура XML:

<doc>
    <content>
    ....
        <facet myattr="12">
        <path>abc</path>
        <path>abc</path>
        <keyword>
        Abcdef ghijk ...
        </keyword>
    </facet>
    <facet myattr="34">
        <path>abc</path>
        <path>abc</path>
        <keyword>
        klsjdcsid llssoeo iie ...
        </keyword>
    </facet>
    .....
    </content>
</doc>

Я пытаюсь получить значение атрибута "myattr" элемента "facet", где
текстовое значение дочернего элемента «path» - «abc».

Проблема в том, что может быть много элементов "путь", которые могут иметь одинаковое значение "abc"

Итак, когда я пытаюсь это сделать:

from lxml import etree

f='..../mine.xml'

tree = etree.parse(f)

r = tree.xpath('/doc/content.../facet/path[text()=\'abc\']')

sentenceLengths = []

for x in r[:]:
    sentenceLengths.append(x.getparent().xpath('@myattr'))

# print(len(r))
print(sentenceLengths[:20])

Он находит нужную мне информацию, но она повторяется для каждого повторения элемента "путь" со значением "abc" для одного и того же элемента "фасет"

Я пытался:

r = tree.xpath('/doc/content.../facet/path[text()=\'abc\'][0]')

Но это не сработало.

Что я делаю не так?

1 Ответ

0 голосов
/ 28 августа 2018

Попробуйте сначала найти facet узел вместо расположения path узлов, а затем обработать родительский узел:

sentenceLengths = tree.xpath('/doc/content.../facet[path="abc"]/@myattr')
...