我正在尝试使用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]')
但这没用。
我在做什么错了?
答案 0 :(得分:1)
尝试先查找facet
节点,而不要查找path
节点,然后处理父节点:
sentenceLengths = tree.xpath('/doc/content.../facet[path="abc"]/@myattr')