找到nokogiri铁轨的第一级儿童

Dzm*_*try 14 ruby nokogiri

我遇到过如何从当前元素中找到第一级孩子的问题?例如我有html:

 <table>
   <tr>abc</tr>
   <tr>def</tr>   
   <table>
     <tr>second</tr>
   </table>
 </table>
Run Code Online (Sandbox Code Playgroud)

我正在使用Nokogiri轨道:

table = page.css('table')
table.css('tr')
Run Code Online (Sandbox Code Playgroud)

它返回所有tr内部table.但是我只需要2个表格的第一级.

mu *_*ort 22

当你这样说:

table = page.css('table')
Run Code Online (Sandbox Code Playgroud)

你抓住两个桌子而不仅仅是顶级桌子.因此,您可以返回到文档根目录并使用仅与第一个表中的行匹配的选择器,如mosch所说,或者您可以修复table为只有外部表格,如下所示:

table = page.css('table').first
trs   = table.xpath('./tr')
Run Code Online (Sandbox Code Playgroud)

甚至这个(取决于HTML的真实结构):

table = page.xpath('/html/body/table')
trs   = table.xpath('./tr')
Run Code Online (Sandbox Code Playgroud)

或许其中一个table(再次感谢Phrogz):

table = page.at('table')
table = page.at_css('table')
# or various other CSS and XPath incantations
Run Code Online (Sandbox Code Playgroud)

  • 你可能想提一下`page.at('table')`或`page.at_css('table')`而不是`page.css('table').first`. (2认同)

mor*_*itz 6

你可以做

rows = page.css('body > table > tr')
Run Code Online (Sandbox Code Playgroud)

也许你必须让选择器适应你的容器元素(我在这里选择'body')

  • 你也可以做`table.css('> tr')`来得到表的直接后代 (2认同)