XPath 和 lxml 语法
我有一个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
这样我就知道在x
中有count
个y
标签。(有没有更好的方法来获取标签的数量?如果有,请告诉我)
但是,如果我这样做:
>>> def try_it(x):
... return root.xpath('y[x]/text()')
...
>>> try_it(1)
[]
它返回的是一个空列表。
所以我的问题是:在不知道标签数量的情况下,如何用XPath语法或表达式来获取它,并且使用lxml
?
如果有什么不清楚的地方,我很抱歉,我尽量解释清楚了这个问题。
2 个回答
1
要计算 y
节点的数量,你可以使用这个 XPath 表达式 'count(/x/y)'
。
另外,我觉得你在 try_it
函数里的表达式有问题,因为你似乎直接用了字面值 x
,而不是把输入的参数拼接到 XPath 表达式里。
也许像这样就能奏效:
>>> def try_it(x):
... return root.xpath('y[' + x + ']/text()')
希望这能帮到你!
1
那 'y[%i]/text()' % x
呢?
现在你看到你哪里出错了吗? :)
( .. 注意,你可以用 xpath 'y'
或 '//y'
一次性抓取所有的 y 元素 )