python - 如何在 python lxml 包中的 XPATH 表达式中设置数组索引
问题描述
我正在尝试使用 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”。
问题是可能有许多元素“路径”可以具有相同的值“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”元素的元素“path”的每个重复值“abc”都会重复它们
我试过了:
r = tree.xpath('/doc/content.../facet/path[text()=\'abc\'][0]')
但它没有用。
我究竟做错了什么 ?
解决方案
尝试首先定位facet
节点而不是定位path
节点然后处理父节点:
sentenceLengths = tree.xpath('/doc/content.../facet[path="abc"]/@myattr')
推荐阅读
- android - SLF4J 登录 Android 应用程序的非 Android 模块
- typescript - 在打字稿中导入超集群时出错(TypeError:无法设置未定义的属性“选项”)
- python - 将参数提供给函数的更好方法
- python - 根据另一列的条件创建熊猫列
- mysql - 使用 mysql 数据库时使用 BCrypt 的身份验证不保存 hashed_password
- webrtc - WebRTC + Adapter.js 在 MS Edge 中连接音频呼叫时出现 addremoteCandidate 错误
- powershell - 将数组列表从第一个脚本传递到第二个脚本
- python - 根据情况删除
- javascript - 使用 appendChild 到当前聚焦的元素
- python - 在 Django 管理员上使用 ImageField 提交表单后出现 404 错误