• 締切済み

linq で 楽天ウェブサービスのXMLの処理で

vb2008を使って、楽天ウェブサービスから取得したXMLデータを処理しようとしています。 楽天ウェブサービス 楽天ジャンル検索API http://webservice.rakuten.co.jp/api/genresearch/ しかし、<genreSearch:GenreSearch>の処理がうまくいかずに困っています。 Dim elementRakuten = XElement.Load(strRakutenGenreSearchUrl) でデータを受けた後、次のように取り出そうとしました。 elementRakuten.Element("Body").Element("genreSearch:GenreSearch") しかし「':' 文字、16 進数値 0x3A を名前に含むことはできません。」というエラーが出てしまいます。 欲しい情報は<child>の一覧です。 データはこのような感じです。 どのように処理すべきなのかご教授お願いします。 <Response> <header:Header xmlns:header="http://api.rakuten.co.jp/rws/rest/Header"> <Args> <Arg key="developerId" value="xxxxxxxxxxxxxxxxxxxxxxxxxxxxx">true</Arg> <Arg key="apiVersion" value="20">true</Arg> <Arg key="operation" value="GenreSearch">true</Arg> <Arg key="version" value="2007-04-11">true</Arg> <Arg key="genreId" value="0">true</Arg> </Args> <Status>Success</Status> <StatusMsg></StatusMsg> </header:Header> <Body> <genreSearch:GenreSearch xmlns:genreSearch="http://api.rakuten.co.jp/rws/rest/GenreSearch/2007-04-11"> <child> <genreId>101240</genreId> <genreName>CD・DVD・楽器</genreName> <genreLevel>1</genreLevel> </child> <child> <genreId>100804</genreId> <genreName>インテリア・寝具・収納</genreName> <genreLevel>1</genreLevel> </child> <child> <genreId>551177</genreId> <genreName>メンズファッション・靴</genreName> <genreLevel>1</genreLevel> </child> </genreSearch:GenreSearch> </Body> </Response>"

みんなの回答

回答No.1

'XNamespaceクラスとAdditions演算子(+)を使おう。第二引数にStringを取る。XNameじゃないんだね。 '文字列を指定しただけで出来るのはXNameへの暗黙の型変換が行なわれているんだと思うけど個人的には嫌い。 'Imports使ってないのは好みの問題です。読みにくくなるけど。 Option Explicit On Option Infer Off Option Strict On Option Compare Binary Class Q5109794 Shared Sub Main() '長いので変数に分けているだけで,特に意味はない。 Dim doc As System.Xml.Linq.XDocument = System.Xml.Linq.XDocument.Load("D:\testfile.xml") Dim body As System.Xml.Linq.XElement = doc.Element(System.Xml.Linq.XName.Get("Response")).Element(System.Xml.Linq.XName.Get("Body")) Dim gSearch As System.Xml.Linq.XElement = body.Element(System.Xml.Linq.XNamespace.Get("http://api.rakuten.co.jp/rws/rest/GenreSearch/2007-04-11") + "GenreSearch") For Each x As System.Xml.Linq.XElement in gSearch.Elements(System.Xml.Linq.XName.Get("child")) System.Diagnostics.Debug.Print(x.Value) Next End Sub End Class

muuuuu
質問者

お礼

名前空間というものと関連しているのですね。 http://www.atmarkit.co.jp/fxml/rensai/rexml06/rexml06.html こちらのサイトを呼んでなんとなく判ってきました。 まだまだ理解できなくてあちこち文献を見ています。 コードありがとうございます。 参考にさせて頂きます。

関連するQ&A