Синтаксис XPath и lxml - PullRequest
       4

Синтаксис XPath и lxml

0 голосов
/ 05 июля 2010

У меня есть 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

Итак, теперь я знаю, что число county в x.(Есть ли лучший способ получить количество тегов? Если да, пожалуйста, предложите)

Однако, если я сделаю это:

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

Возвращается пустой список.

Итак, мой вопрос: не зная произвольного числа тегов, как мне получить синтаксис XPath или выражение для него и использовать lxml?

Извините, если что-то не понятно, я старался изо всех силобъяснить проблему.

Ответы [ 2 ]

1 голос
/ 05 июля 2010

Чтобы подсчитать количество y узлов, вы можете использовать выражение XPath 'count(/x/y)'.

Кроме того, я думаю, что проблема с вашим выражением в функции try_it заключается в том, что вы, кажется, используете литеральное значение x вместо объединения входного параметра в выражение XPath.

Может быть, что-то вроде этого будет работать:

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

Надеюсь, это поможет!

1 голос
/ 05 июля 2010

а как же 'y[%i]/text()' % x?

теперь вы видите, где совершили ошибку?:)

(.. обратите внимание, что вы можете захватить все элементы y вместе с xpath 'y' или '//y')

...