Xpath объяснение в коде - PullRequest
       18

Xpath объяснение в коде

1 голос
/ 31 марта 2011

В компании, в которой я работаю, мне пришлось погрузиться в эту часть кода. Один из ваших разборов не удался, и есть подозрение, что в этой части кода есть ошибка, но я из-за неопытности не могу понять, что именно он должен делать.

from lxml import etree
uni = etree.tounicode

def results(self):
    return [(e.attrib['href'], uni(e))
            for e in self.doc.xpath('//li[@class="g" and not(class="localbox")]//a[@class="l"]')]

1 Ответ

2 голосов
/ 31 марта 2011

Выражение XPath выполняет следующие действия:

//li[@class="g" and not(class="localbox")]//a[@class="l"]
  ^        ^              ^                 ^       ^
  1        2              3                 4       5
  1. находит все вхождения <li> элементов
  2. , которые имеют атрибут с именем class со значением g (пример <li class="g">)
  3. , который не имеет подэлемента class со строковым значением localbox (объясню это позже)
  4. после этого он находит все элементы <a> "внутри" этих<li> элементы
  5. , имеющие имя атрибута class со значением 1 (пример <a class="1">)

Веселая часть - 3. Вероятно, есть @ отсутствует перед class.В этом случае утверждение было бы: 3. что у него нет имени атрибута class со значением localbox.

Неявное преобразование строкового значения и сравнение элементов узла является ... ошибкой сказатьв мере.Я не думаю, что вы хотите что-то подобное.

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

...