Parse XML with hpricot, get attributes
My xml:
http://www.google.ru/ig/api?weather=Chelyabinsk
<forecast_information>
<city data="Chelyabinsk, Province of Chelyabinsk"/>
</forecast_information>
How to get c开发者_运维问答ity data for example? Not inner_html, just attributes like city data, postal code etc.
XPath will be a big help when parsing XML. Looks like hpricot has support for it, so it's incredibly easy.
The XPath expression to extract the data attribute inside a city element is as follows:
/forecast_information/city/@data
The expression says, find the attribute named data (that's what the @ sign means) inside the element named city, which is in turn inside the element named forecast_information.
Now, the XML you linked on google.ru is more complicated than the example you posted here. To extract the same information from it, use this expression:
//city/@data
This expression says, find the attribute named data inside the element named city, no matter where city is in the source XML.
The selected answer didn't work for me, but the xpath part put me on the right track. This is what I ended up with:
doc = Hpricot::XML(xml)
result = doc.at("//city")['data']
Here is my full parser in ruby for an xml element like this:
<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
加载中,请稍侯......
精彩评论