2009-03-23 7 views
1
public string GetArtistThumbnail(string artistName) 
{ 
    var request = 
     WebRequest.Create("http://ws.audioscrobbler.com/2.0/?method=artist.getinfo&artist=" + artistName + 
     "&api_key=" + 
     APIKey) as HttpWebRequest; 

    using (var response = request.GetResponse() as HttpWebResponse) 
    { 
     var ds = new DataSet(); 
     ds.ReadXml(response.GetResponseStream()); // <-- Exception is thrown here 
    } 

    return ""; 
} 

上記の方法は、基本的にxxxファイルをLastFM's API Servicesから取得します。 ReadXml方法でXMLからデータセットを充填するときC#: "テーブル 'sometable'はネストされたリレーションシップで自身の子テーブルになることはできません。

今、私は次の例外に直面しています:取得されているXMLファイルの

The table (artist) cannot be the child table to itself in nested relations.


Here is an example

XMLファイルにネストされたArtistがあることに注意してください。これが例外の理由であると私は確信しています。


私の質問これを防ぐにはどうすればよいですか?ネストしたテーブルに関しては、

答えて

3

私が知る限り、DataSetsはどんなタイプのXMLでも構いません。この場合、実際にデータセットが必要ですか?

私は、linq 2 xmlまたはXmlDocumentに切り替えて、Webサービスの結果を操作することをお勧めします。

+0

がXdocumentでLinq2Xmlを使用してスイッチを使用してみてくださいDataSet.EnforceConstraintsをオフにします –

1

私はFreddyの答えはメリットがあると思いますが、xmlに依存してスキーマを定義するのではなく、ReadXmlが呼び出される前に手動でDataSetスキーマを定義することができます。

ReadXmlをGetResponseから分離し、ReadXmlが呼び出される前にxsltを実行することもできます。つまり、スキーマをDataSetと互換性を持たせることができます。

ロングショット...