XPath和lxml语法

时间:2010-07-04 20:27:30

标签: python xpath lxml

我有一个XML文件,其结构如下所示:

<x>
   <y/>
   <y/>
   .
   .
</x>

<y>标签的数量是任意的。

我想获取<y>标签的文本,为此我决定使用XPath。我已经找到了第一个y的语法:(假设rootx

textFirst = root.xpath('y[1]/text()')

这可以按预期工作。

但是我的问题是我不会事先知道<y>标签的数量,所以为了解决这个问题,我做了这个:

>>> count = 0
>>> for number in root.getiterator('y'):
...     count += 1

现在我知道count中有yx个。 (有没有更好的方法来获得标签数量?如果是,请建议)

但是,如果我这样做:

>>> def try_it(x):
...     return root.xpath('y[x]/text()')
... 
>>> try_it(1)
[]

返回一个空列表。

所以我的问题是:不知道任意数量的标签,如何获取XPath语法或表达式并使用lxml

如果不清楚,我很抱歉,我尽力解释这个问题。

2 个答案:

答案 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()')

希望这有帮助!