【问题标题】:How do I select all of the tr's except the last two tr's如何选择除最后两个 tr 之外的所有 tr
【发布时间】:2011-06-25 07:40:52
【问题描述】:

在 lxml 中,我使用 xpath 选择表中的所有 tr(行数不同),除了最后两行包含乱码。

是否存在排除最后两行的模式匹配?我正在查看 xpath 教程,显然有一个“except”运算符和一个“last()”,但似乎无法让我的代码正常工作。

到目前为止,我有这个。我要在这个模式中添加什么以使其排除最后两行?主要问题是 tr 的变化数。

result = doc.xpath("//tr")

我想我可以把它变成一个列表,只删除最后两个元素,但是有没有更简单/优雅的解决方案?

提前致谢!

【问题讨论】:

  • 好问题,+1。请参阅我对选择所有想要的 tr 元素的纯 XPath 解决方案(单个单行表达式)的回答。 :)

标签: python xpath lxml except


【解决方案1】:

使用

expressionSelectingTheTable/tr[not(position() > last() -2)]

expressionSelectingTheTable 应替换为特定的 XPath 表达式,该表达式选择正在询问问题的表(例如 //table[@id='foo']

这个单一的 XPath 表达式选择 table 父级的所有 tr 子级,其位置不是最后两个之一。

【讨论】:

  • 嗯,有趣,不知道你可以做 position() > last()。我以为你只能有一个或另一个。谢谢!
  • @chesspro:实际上是 not(position() > last() -2) ,是的,position()last() 函数可以参与 any XPath 表达式。像not(position() = last()) 这样的表达式经常被使用。
【解决方案2】:
result = doc.xpath("//tr")[0:-2]

应该做的伎俩。

【讨论】:

    猜你喜欢
    • 2011-04-30
    • 1970-01-01
    • 2012-09-08
    • 1970-01-01
    • 1970-01-01
    • 2015-04-12
    • 2012-02-13
    • 1970-01-01
    • 2014-01-29
    相关资源
    最近更新 更多