XPath和LXML语法
我有结构的XML文件,如下所示:XPath和LXML语法
<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
?
对不起,如果有什么不清楚,我尽我所能解释这个问题。
'y[%i]/text()' % x
?
现在你看到你在哪里做错了? :)
(..请注意,您可以捕获所有的Y元素结合在一起使用XPath 'y'
或'//y'
)
要计算y
节点的数量,你可以使用XPath表达式'count(/x/y)'
。
此外,我认为try_it
函数中的表达式的问题在于,您似乎正在使用文字值x
而不是将输入参数连接到XPath表达式中。
也许像这样的工作:
>>> def try_it(x):
... return root.xpath('y[' + x + ']/text()')
希望这有助于!
count()正是我所需要的。感谢您的答复。 – user225312 2010-07-04 20:43:22
为什么count()返回float? – user225312 2010-07-04 21:01:27
@PulpFiction - 对于任何返回数值结果的XPath表达式,lxml返回float(在Java中,相应的结果是一个Double)。你应该能够贬低它。 – mlschechter 2010-07-04 21:28:30
Ohhhhhhh!有用!非常感谢。非常愚蠢的我。 我的方法是获取'y'标签的数量还是有一个较短的版本? – user225312 2010-07-04 20:38:02
PulpFiction:它发生了:)我已经用简单的方式更新了答案,如何更简单地做到这一点 – mykhal 2010-07-04 20:42:38
mykhal:谢谢你的帮助,你为我节省了很多辛苦。祝你有美好的一天! :) – user225312 2010-07-04 20:48:35