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

如何使用xpath&lxml获取节点的完整内容?

  •  4
  • significance  · 技术社区  · 14 年前

    <font> 标签,它包含自己的html标签。如果我用

    //td[@valign="top"]/p[1]/font[@face="verdana" and @color="#ffffff" and @size="2"]
    

    我得到了正确数量的节点,但它们作为lxml对象返回( <Element font at 0x101fe5eb0>

    如果我用

    //td[@valign="top"]/p[1]/font[@face="verdana" and @color="#ffffff" and @size="2"]/text()
    

    <字体> 节点。

    如果我用

    //td[@valign="top"]/p[1]/font[@face="verdana" and @color="#ffffff" and @size="2"]/node()
    

    something something <Element a at 0x102ac2140> something )

    是否可以使用纯XPath查询来获取 <字体> .xpath() 方法,而不是lxml对象?

    请注意,我将从XPath查询返回一个包含许多节点的列表,因此解决方案需要支持它。

    只是为了澄清。。。我想回来 something something <a href="url">inside</a> something

    <font face="verdana" color="#ffffff" size="2"><a href="url">inside</a> something</font>
    
    2 回复  |  直到 14 年前
        1
  •  2
  •   unutbu    14 年前

    我不确定我是否明白——这和你要找的很接近吗?

    import lxml.etree as le
    import cStringIO
    content='''\
    <font face="verdana" color="#ffffff" size="2"><a href="url">inside</a> something</font>
    '''
    doc=le.parse(cStringIO.StringIO(content))
    
    xpath='//font[@face="verdana" and @color="#ffffff" and @size="2"]/child::*'
    x=doc.xpath(xpath)
    print(map(le.tostring,x))
    # ['<a href="url">inside</a> something']
    
        2
  •  2
  •   Dimitre Novatchev    14 年前

    是否可以使用纯XPath 查询以获取 <font> 返回内容字符串 从 .xpath()

    注意,我正在返回一个 来自XPath查询的节点,因此

    只是为了澄清。。。我想回来 一些东西 <a href="url">inside</a> something 有点像。。。

    <font face="verdana" color="#ffffff" size="2"><a
    

    在某物内部

    :没有。

    XPath对“标记”不起作用,但是 节点

    如果需要特定节点标记的字符串表示形式,此类对象通常支持 outerXML 属性--检查宿主语言(本例中为lxml)的文档。

    正如@Robert Rossney在他的评论中指出的那样:lxml的 tostring() 方法等同于其他环境 outerXml .