我正在使用Rails 4.2.7和Ruby(2.3)以及Nokogiri。我如何找到表的最直接的tr子级,而不是嵌套的子级?目前我在表中找到表行,如下所示。
tables = doc.css('table')
tables.each do |table|
rows = table.css('tr')
字符串
这不仅可以找到表的直接行,例如。
<table>
<tbody>
<tr>…</tr>
型
但是它也在行中找到行,例如,
<table>
<tbody>
<tr>
<td>
<table>
<tr>This is found</tr>
</table>
</td>
</tr>
型
如何优化搜索以只查找直接的tr元素?
3条答案
按热度按时间k5ifujac1#
你可以使用
table
通过几个步骤来完成。首先,你需要找到table
的“级别”(即它在其他表中的嵌套程度),然后找到所有具有相同数量的table
祖先的后代tr
:字符串
在更一般的情况下,你可能有
tr
直接嵌套其他tr
s,你可以这样做(这将是无效的HTML,但你可能有XML或其他一些标签):型
第一步可以分为两个独立的查询,这可能更清楚:
型
(This如果有一个表没有
tr
s,则会失败,因为first_tr
将是nil
。上面的组合方法可以正确处理这种情况。)unhi4e5o2#
我不知道这是否可以直接用css/xpath来完成,所以我写了一个小方法来递归地查找节点,一旦找到就停止递归。
字符串
qc6wkl3g3#
你要试试这个吗?
字符串