
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>"
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/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
名前空間というものと関連しているのですね。
http://www.atmarkit.co.jp/fxml/rensai/rexml06/re …
こちらのサイトを呼んでなんとなく判ってきました。
まだまだ理解できなくてあちこち文献を見ています。
コードありがとうございます。
参考にさせて頂きます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
JSONで文字列が長い時
-
メモリをアドレスを直接指定し...
-
リロード後にプルダウンの選択...
-
セレクトボックスを非表示にし...
-
c言語 16進数の2進数への変換
-
実行時エラー 3020の対策
-
Infoseek地図の住所検索をホー...
-
ACCESS テキストボックスを隙...
-
Application.ScreenUpdating = ...
-
[C#] string name = new ..
-
Pythonでコンソールをクリアす...
-
プルダウンメニューがプルアップに
-
[python] 文字列を変数名として...
-
実行中の変数の中身をイミディ...
-
16進の10進変換について
-
セレクトメニューで2つの項目...
-
複数列を持ったリストボックス...
-
Perlで複数の値を返す良い方法...
-
Perl でワードファイルのヘッダ...
-
数値かどうかの判定方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
JSONで文字列が長い時
-
メモリをアドレスを直接指定し...
-
Excel VBAで行追加後の...
-
途中まで出来ているのですが‥(D...
-
CGI(Perl)で、Net::FTPを使いたい
-
リロード後にプルダウンの選択...
-
フォームで入力した値を表示し...
-
linq で 楽天ウェブサービスのX...
-
【C#】数値の範囲チェックについて
-
連結リストについて
-
VB2010 のユーザコントロールの...
-
半角スペースが有効にならない。
-
iteratorの再利用について
-
CGIでのページ指定~その(2)
-
CGIからメールに書き出しする際...
-
複数行URLエンコードができるCG...
-
Application.ScreenUpdating = ...
-
formで特定のinputを送信しない...
-
セレクトメニューで2つの項目...
-
「*:*」って何を意味するのでし...
おすすめ情報