VB.NETでXMLに簡単にアクセスする方法
VS2010(きっと.NET Framework 3.5か4.0あたり?)から、XMLの要素に簡単にアクセスする方法。
VB.NETでXMLを読もうとしてるんだけど、どこもXElementとかXMLのノードを順に追っていって…みたいなサンプルしかなくて、確か最近の.NETってdynamic型みたいに直接アクセスできなかったかなぁ。と思いつつ。
Google Geocoding APIの結果がJSONで返る(URLを変えればXMLも可能)ので、本当はDynamicJSONを使いたかったんだけど、ちょっとうまくいかなかったのでXMLでやってみました。
Google Geocoding APIについてはこちらを→Get Started | Geocoding API | Google Developers
Googleのサンプルとして、http://maps.googleapis.com/maps/api/geocode/xml?address=1600+Amphitheatre+Parkway,+Mountain+View,+CA&sensor=false というURLを投げると、結果がXMLで返ってくるので、
Dim QueryUriXML As String = "http://maps.googleapis.com/maps/api/geocode/xml?address=1600+Amphitheatre+Parkway,+Mountain+View,+CA&sensor=true_or_false" Dim geoxml As XDocument = XDocument.Load(QueryUriXML) 'lat=緯度 'lng=経度 Dim lat As String = "" Dim lng As String = "" If geoxml.<GeocodeResponse>.<status>.Value = "OK" Then lat = geoxml.<GeocodeResponse>.<result>.<geometry>.<location>.<lat>.Value lng = geoxml.<GeocodeResponse>.<result>.<geometry>.<location>.<lng>.Value Debug.WriteLine("lat: " & lat) Debug.WriteLine("lng: " & lng) End If
こんな感じで読めます。この手法、結構前に知ってたんだ(LINQと同時期だったかなぁ)けど情報があまりなくて。
XDocument.Loadでアクセスして、そのXMLレスポンスが格納されたXDocumentに対して<要素名1>.<要素名1>,Value みたいにすると簡単にアクセスできるよ。
といった話でした。