gpt4 book ai didi

ruby - 如何收集每个节点以将子节点作为对象排列?

转载 作者:太空宇宙 更新时间:2023-11-03 18:15:07 25 4
gpt4 key购买 nike

我想在每一行中将 child 作为对象作为数组。如何做到这一点?

现在我可以获得 .row 子类的列表:

require "nokogiri"
html = <<-EOS
<div id="layout-grid">
<div class="row">
<div class="col-md-12">.col-md-12</div>
</div>
<div class="row">
<div class="col-md-6">.col-md-6</div>
<div class="col-md-6">.col-md-6</div>
</div>
</div>
EOS

def jsonize_grid(element)
rows = []
rows << element.css('.row > div').map {|node| { col: node.attr('class') } }
rows
end
doc = Nokogiri::HTML.parse(html).css("#layout-grid")
puts jsonize_grid(doc)

我想要的结果:

[{col: "col-md-12"}],[{col: "col-md-6"},{col: "col-md-6"}]

非常感谢您的帮助。

最佳答案

我会这样做:

require 'nokogiri'

doc = Nokogiri::HTML(<<EOT)
<div id="layout-grid">
<div class="row">
<div class="col-md-12">.col-md-12</div>
</div>
<div class="row">
<div class="col-md-6">.col-md-6</div>
<div class="col-md-6">.col-md-6</div>
</div>
</div>
EOT

下面是如何找到“layout-grid” block ,然后是嵌入的“.row”div:

content = doc.search('#layout-grid .row').map{ |row| 
row.search('div').map{ |div|
{'col' => div['class']}
}
}

content
# => [[{"col"=>"col-md-12"}], [{"col"=>"col-md-6"}, {"col"=>"col-md-6"}]]

'#layout-grid .row' 是 CSS 选择器,它告诉 libXML2 库在查找嵌入的 div 时完成大部分繁重的工作,如果您正在处理一个大 HTML 文件。

标记的参数,无论它们是在 XML 还是 HTML 文件中,都可以使用 [...] 轻松访问,就像节点是哈希一样。这使得使用 div['class'] 更简洁,更易读。

content 可以使用以下方式转换为 JSON:

require 'json'
puts content.to_json
# >> [[{"col":"col-md-12"}],[{"col":"col-md-6"},{"col":"col-md-6"}]]

关于ruby - 如何收集每个节点以将子节点作为对象排列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27600585/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com