【问题标题】:Combining Class and Nth-Child in Perl TreeBuilder and XPath在 Perl TreeBuilder 和 XPath 中结合 Class 和 Nth-Child
【发布时间】:2014-03-11 00:42:11
【问题描述】:

我正在尝试获取 html 表中列的总和。该表的第一行是所有标题。第一行之后的每一行的每个单元格都有“正确”类,所以我打算使用该类作为选择器来忽略不必要的标题。但是,我只需要每行的第二个单元格。如何组合这两个选择器?是这样吗?

my $tree = HTML::TreeBuilder::XPath->new_from_file($fileName);
foreach $value ($tree->findnodes('//table/tr/td[@class="right"[position()=2]')){
    stuff;
}

【问题讨论】:

  • 左方括号有两个,右方括号只有一个。这可能是不对的。

标签: perl xpath html-treebuilder


【解决方案1】:

您可以将谓词一个接一个地组合起来:

//table/tr/td[@class="right"][2]

或者,您可以使用逻辑and

//table/tr/td[@class="right" and position()=2]

【讨论】:

  • 那么这对于添加每个单元格的值是否正确? foreach $val ($tree->findnodes('//table/tr/td[@class="right"][2])){ $sum += $val->findvalue(); }
  • 如果只想求和,可以使用XPath函数sum():sum(//table/tr/td[@class="right"][2])
  • 等一下——使用这种表示法会给我所有 单元格的第二个孩子,还是会给我第二个孩子的 单元格?
  • @user2933738: [position()=2][2] 在 XPath 中的含义相同。 parent/element[2] 返回parent 的第二个element 子级。要获得element 的第二个孩子,您需要parent/element/*[2]
  • 好的。那么,为了获得“正确”的类, 的第二个孩子,我会这样说吗? findnodes('//table/tr[2][@class="right"]') 或者这会让我成为“正确”类 tr 对象的第二个孩子吗?
猜你喜欢
相关资源
最近更新 更多
热门标签