1

ループ時に nokogiri とオブジェクト グラフを使用しています。

  #<Nokogiri::XML::Element:0x3fe7b34a49c8 name="dt" children=[#
<Nokogiri::XML::Element:0x3fe7b34a4720 name="a" attributes=[#
<Nokogiri::XML::Attr:0x3fe7b34a46bc name="href" value="http://www.example.com">, #
<Nokogiri::XML::Attr:0x3fe7b34a4694 name="add_date" value="1246334352997870">] children=[#
<Nokogiri::XML::Text:0x3fe7b34a39c4 "Example.com Website ">]>, #
<Nokogiri::XML::Text:0x3fe7b34a35f0 "\n">, 

この情報をこのクラスにロードしたい:

class LinkInfo
  attr_accessor :href, :add_date, :text
end

href = http://www.example.com
add_date = 1246334352997870
text = "example.com website" 

これを行うためのエレガントな方法はありますか?私は現在、子供たちをループして、正しいタグ名などにいるかどうかを確認するために if ステートメントを使用しています.

ruby では、contains? を使用して値がコレクション内にあるかどうかを確認できることは知っていますが、その値も取得したいと考えています。

4

1 に答える 1

1

HTML が最後の質問と同じであると仮定します。

<dl><p>
  <dt><h3 ADD_DATE="120ssssss">label 1</H#>
</dl>
<dl><p>
  <dt><a href="http://www.example.com" ADD_DATE="12312323">Text 1</A>
  <dt><a href="http://www.example.com" ADD_DATE="12312323">Text 2</A>
  <dt><a href="http://www.example.com" ADD_DATE="12312323">Text 3</A>
</dl>

<dl><p>
  <dt><h3 ADD_DATE="120ssssss">label 2</H#>
</dl>
<dl><p>
  <dt><a href="http://www.example.com" ADD_DATE="12312323">Text 1</A>
  <dt><a href="http://www.example.com" ADD_DATE="12312323">Text 2</A>
  <dt><a href="http://www.example.com" ADD_DATE="12312323">Text 3</A>
</dl>

次に、これを行うことができます:

doc = Nokogiri.HTML(html)

links = doc.css('dl dt a').map do |link|
  li = LinkInfo.new
  li.href = link['href']
  li.add_date = link['ADD_DATE']
  li.text = link.text
  li
end
于 2012-12-01T02:17:28.467 に答える