如何在 python lxml 包中的 XPATH 表达式中设置数组索引
How to set array index in a XPATH expression in python lxml package
我正在尝试使用 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" 元素 "path" 和值 "abc" 的元素 "path" 的每次重复都会重复它们
我试过了:
r = tree.xpath('/doc/content.../facet/path[text()=\'abc\'][0]')
但是没有用。
我做错了什么?
尝试首先定位 facet
个节点,而不是定位 path
个节点,然后再处理父节点:
sentenceLengths = tree.xpath('/doc/content.../facet[path="abc"]/@myattr')
我正在尝试使用 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" 元素 "path" 和值 "abc" 的元素 "path" 的每次重复都会重复它们
我试过了:
r = tree.xpath('/doc/content.../facet/path[text()=\'abc\'][0]')
但是没有用。
我做错了什么?
尝试首先定位 facet
个节点,而不是定位 path
个节点,然后再处理父节点:
sentenceLengths = tree.xpath('/doc/content.../facet[path="abc"]/@myattr')