プロが教える店舗&オフィスのセキュリティ対策術

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/20 …
<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>"

A 回答 (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/20 … + "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
    • good
    • 0
この回答へのお礼

名前空間というものと関連しているのですね。
http://www.atmarkit.co.jp/fxml/rensai/rexml06/re …

こちらのサイトを呼んでなんとなく判ってきました。

まだまだ理解できなくてあちこち文献を見ています。

コードありがとうございます。
参考にさせて頂きます。

お礼日時:2009/07/09 23:28

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!