代码中的Xpath解释

时间:2011-03-31 13:52:16

标签: python xpath elementtree

在我工作的公司里,我不得不深入研究这部分代码。你的一个解析是失败的,并且怀疑这部分代码存在错误,但是由于我的经验不足,我无法确切知道它应该做什么。

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 个答案:

答案 0 :(得分:2)

XPath表达式执行以下操作:

//li[@class="g" and not(class="localbox")]//a[@class="l"]
  ^        ^              ^                 ^       ^
  1        2              3                 4       5
  1. 查找所有<li>元素
  2. 的出现次数
  3. 具有名为class的属性,其值为g(示例<li class="g">
  4. 没有带字符串值class的子元素localbox(将在稍后解释)
  5. 之后,它会在<a>元素
  6. 中找到所有<li>个元素
  7. ,其属性名称class的值为1(示例<a class="1">
  8. 有趣的部分是3. @前面可能缺少class。在这种情况下,该陈述将是:3。没有具有值class的属性名localbox

    隐式字符串值转换和节点元素的比较是......最不容易出错。我不认为你想要那样的东西。

    希望它有所帮助。