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

标签 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”值,其中
子元素“path”文本值为“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])

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

我尝试过:

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

但是没有成功。

我做错了什么?

最佳答案

尝试首先定位facet节点而不是定位path节点,然后处理父节点:

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

关于python - 如何在 python lxml 包中的 XPATH 表达式中设置数组索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52055435/

相关文章:

python - 如何使用 python 和 openssl 验证 webhook 签名

java - 在 XML 文件中搜索字符串

html - 根据一个或多个列值查找或更改同一表行上的项目

xml - 在 xmlstarlet 上使用 xpath 检索 XML 元素的所有属性名称

java - XPath、Java 和序列化 xml

python - 属性错误 : 'InstrumentedList' object has no attribute 'get'

python - 如何在 Python 中包装内置方法? (或 'how to pass them by reference' )

css - 如何将帖子标题放在两列的表格中

python - 使用 Python 的 ElementTree 处理时哪种 XML 样式更好?

python - 将列匹配并添加到数据框