我遇到过如何从当前元素中找到第一级孩子的问题? 例如我有html:
<table>
<tr>abc</tr>
<tr>def</tr>
<table>
<tr>second</tr>
</table>
</table>
我正在使用Nokogiri作为rails:
table = page.css('table')
table.css('tr')
它会返回tr
内的所有table
。
但我只需要2个表格的第一级。
答案 0 :(得分:22)
当你这样说时:
table = page.css('table')
你抓住两张桌子而不只是顶级桌子。因此,您可以返回到文档根目录并使用仅与mosch所说的第一个表中的行匹配的选择器,或者您可以将table
修复为只有外部表格,如下所示:
table = page.css('table').first
trs = table.xpath('./tr')
甚至这个(取决于HTML的真实结构):
table = page.xpath('/html/body/table')
trs = table.xpath('./tr')
或者其中一个table
(再次感谢Phrogz):
table = page.at('table')
table = page.at_css('table')
# or various other CSS and XPath incantations
答案 1 :(得分:5)
你可以做到
rows = page.css('body > table > tr')
也许你必须让选择器适应你的容器元素(我在这里选择'body')
答案 2 :(得分:1)
另一方面,您可以尝试使用以下内容:
text = <<HERE
<table>
<tr>abc</tr>
<tr>def</tr>
<table>
<tr>second</tr>
</table>
</table>
HERE
xml = Nokogiri::XML(text)
xml.xpath("/table/tr/").each do |node|
puts node.text
end
在这个例子中,'/ table / tr'表达式表示所需元素的绝对路径 - 在我们的例子中是'tr'。
答案 3 :(得分:0)