如何在python lxml包的XPATH表达式中设置数组索引

时间:2018-08-28 10:15:56

标签: python xml xpath lxml

我正在尝试使用python'lxml'库搜索大型XML。

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>

我正在尝试检索元素“ facet”的属性“ myattr”值,其中
 子元素“路径”的文本值为“ abc”。

问题是可能有许多元素“ path”的值都可以是“ 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])

它找到了我需要的信息,但是对于元素“ path”的每个重复,对于相同的“ facet”元素,其值都为“ abc”,它们都会重复

我尝试过:

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

但这没用。

我在做什么错了?

1 个答案:

答案 0 :(得分:1)

尝试先查找facet节点,而不要查找path节点,然后处理父节点:

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