(ヽ´ω`) < 助けてほしいマン

わからないことを助けてほしいマンが書くブログ

(ヽ´ω`) < 2. 作成したDOMから要素を選択。

(ヽ´ω`) < 作成したDOMから要素を選択。

1で作成したdocから、値を取得したい要素(Nokogiri::XML::Nodeオブジェクト)を選択する。選択方法にはXPathCSSの他に、children, parents, siblings等の一般的なツリー探索のメソッド郡が用意されている。

(ヽ´ω`) < XPathCSSで選択する

XPathCSSで要素を選択するには、それぞれ#xpath#cssを使用する。

(ヽ´ω`) < 選択されるのは常にNodeSet

irbで上記のコードを順次実行してもらうとわかるが、#xpath#cssメソッドが返す値は常に[]で囲まれた値、つまりは配列のような値となる。(実際にはNokogiri::XML::NodeSetのオブジェクト)

上記の例ではHTML内のtitle要素といった、HTML文章内で1つしか存在しないことが明確な要素であっても、要素数1の配列(のようなオブジェクト)が返される。

ここから目的のNodeオブジェクトを取得する方法は、Arrayオブジェクトのそれとほとんど同じ。

これは忘れがちだが、重要なポイントとなる。詳しくは、次の「3. 選択された要素から値を取り出す。又は更にそこから要素を選択」で説明する。

ちなみにNodeSetとSetの名前がついているが、重複した値も許可されているし、順序も保証されている。

(ヽ´ω`) < 一般的なツリー探索メソッド(children, parent, *sibling)

#children, #parent, #(next|previous)_sibling等の一般的なツリー探索メソッドも用意されている。#parentなど、これらのメソッドではNodeSetではなく、Nodeオブジェクトを返すものもある。あまり使わないんじゃない感が強いので割愛。

(ヽ´ω`) < 次は?

1でdocを作成して、今回*_nodesを作成(選択)した。

最後はこれら選択された要素群から、実際に値を取り出していく。