私のxml:
http://www.google.ru/ig/api?weather=チェリャビンスク
<forecast_information>
<city data="Chelyabinsk, Province of Chelyabinsk"/>
</forecast_information>
たとえば、都市データを取得するにはどうすればよいですか? inner_html ではなく、都市データ、郵便番号などの属性のみです。
私のxml:
http://www.google.ru/ig/api?weather=チェリャビンスク
<forecast_information>
<city data="Chelyabinsk, Province of Chelyabinsk"/>
</forecast_information>
たとえば、都市データを取得するにはどうすればよいですか? inner_html ではなく、都市データ、郵便番号などの属性のみです。
選択した答えは私にはうまくいきませんでしたが、xpathの部分は私を正しい軌道に乗せました。これは私が最終的に得たものです:
doc = Hpricot::XML(xml)
result = doc.at("//city")['data']
これが次のようなxml要素のrubyの完全なパーサーです:
<Response Field1="abc" Field2="123">
def parse(xml)
vars = {}
fields = %w[Field1 Field2 Field3]
doc = Hpricot::XML(xml)
for field in fields
vars[field] = doc.at("//Response")[field]
end
return vars
end
XPathは、XML を解析する際に非常に役立ちます。hpricot がサポートしているようで、信じられないほど簡単です。
data
要素内の属性を抽出する XPath 式city
は次のとおりです。
/forecast_information/city/@data
data
式は、 という名前の要素内で名前付きの属性(@
記号が意味するもの)を見つけ、city
それがさらに という名前の要素内にあることを示していますforecast_information
。
さて、google.ru でリンクした XML は、ここに投稿した例よりも複雑です。そこから同じ情報を抽出するには、次の式を使用します。
//city/@data
この式は、がソース XML のどこにあるかに関係なく、data
という名前の要素内で という名前の属性を見つけることを示しています。city
city