代码之家  ›  专栏  ›  技术社区  ›  akosch

如何匹配XPath(lxml)中元素的内容?

  •  12
  • akosch  · 技术社区  · 16 年前

    我想用XPath表达式用lxml解析HTML。我的问题是匹配标记的内容:

    <a href="http://something">Example</a>
    

    元素,我可以使用

    .//a[@href='http://something']
    

    .//a[.='Example']
    

    .//a[contains(.,'Example')]
    

    lxml抛出“invalid node predicate”异常。

    我做错什么了?

    示例代码:

    from lxml import etree
    from cStringIO import StringIO
    
    html = '<a href="http://something">Example</a>'
    parser = etree.HTMLParser()
    tree   = etree.parse(StringIO(html), parser)
    
    print tree.find(".//a[text()='Example']").tag
    

    预期输出为“a”。我得到“SyntaxError:无效节点谓词”

    1 回复  |  直到 12 年前
        1
  •  20
  •   systempuntoout    16 年前

    .//a[text()='Example']

    tree.xpath(".//a[text()='Example']")[0].tag
    

    如果您想使用iterfind()、findall()、find()、findtext(),请记住 在中不可用 ElementPath .

    lxml.etree文件 find、findall和 元素,如最初所知 一个lxml特定的扩展,这些 类还提供xpath()方法 完整的XPath语法,以及

    推荐文章