Ruby 1.9.3p385、Nokogiri、xpath v.1 を使用しています。
Stackoverflow のすばらしい人々の助けを借りて、次の xpath 式を思いつきました。
products = xml_file.xpath("(/root_tag/middle_tag/item_tag")
この XML ファイルを分割するには:
<root_tag>
<middle_tag>
<item_tag>
<headline_1>
<tag_1>Product title 1</tag_1>
</headline_1>
<headline_2>
<tag_2>Product attribute 1</tag_2>
</headline_2>
</item_tag>
<item_tag>
<headline_1>
<tag_1>Product title 2</tag_1>
</headline_1>
<headline_2>
<tag_2>Product attribute 2</tag_2>
</headline_2>
</item_tag>
</middle_tag>
</root_tag>
2製品に。
ここで、各製品を調べて、すべての製品情報を (リーフ ノードを抽出することによって) 抽出したいと考えています。その目的のために、私はこのコードを使用しています:
products.each do |product|
puts product #=> <item_tag><headline_1><tag_1>Product title 1</tag_1></headline_1><headline_2><tag_2>Product attribute 1</tag_2></headline_2></item_tag>
product_data = product.xpath("//*[not(*)]")
puts product_data #=> <tag_1>Product title 1</tag_1><tag_2>Product attribute 1</tag_2><tag_1>Product title 2</tag_1><tag_2>Product attribute 2</tag_2>
end
ご覧のとおり、これは私が望んでいることを正確に実行しますが、1 つのことを除いて、製品ではなく製品を読み取ります。
検索を製品のみに制限するにはどうすればよいですか? 回答の際は、例が簡略化されていることに注意してください。私は、ソリューションが製品の知識を「消去」することを望みます(可能であれば)。これは、おそらくすべての場合に機能するためです。