我有一个XML文件,其结构如下所示:
<x>
<y/>
<y/>
.
.
</x>
<y>
标签的数量是任意的。
我想获取<y>
标签的文本,为此我决定使用XPath。我已经找到了第一个y
的语法:(假设root
为x
)
textFirst = root.xpath('y[1]/text()')
这可以按预期工作。
但是我的问题是我不会事先知道<y>
标签的数量,所以为了解决这个问题,我做了这个:
>>> count = 0
>>> for number in root.getiterator('y'):
... count += 1
现在我知道count
中有y
个x
个。 (有没有更好的方法来获得标签数量?如果是,请建议)
但是,如果我这样做:
>>> def try_it(x):
... return root.xpath('y[x]/text()')
...
>>> try_it(1)
[]
返回一个空列表。
所以我的问题是:不知道任意数量的标签,如何获取XPath语法或表达式并使用lxml
?
如果不清楚,我很抱歉,我尽力解释这个问题。
答案 0 :(得分:1)
'y[%i]/text()' % x
怎么办?
现在你看到你犯了哪个错误? :)
(..请注意,您可以将所有y元素与xpath 'y'
或'//y'
一起捕获)
答案 1 :(得分:1)
要计算y
个节点的数量,可以使用XPath表达式'count(/x/y)'
。
另外,我认为try_it
函数中表达式的问题在于您似乎使用了文字值x
而不是将输入参数连接到XPath表达式。
也许这样的事情会起作用:
>>> def try_it(x):
... return root.xpath('y[' + x + ']/text()')
希望这有帮助!