2009-03-23 4 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 ""; 
} 

La méthode ci-dessus extrait essentiellement un fichier XML de l'un des LastFM's API Services.C#: "La table" sometable "ne peut pas être la table enfant à elle-même dans les relations imbriquées."

Maintenant, je suis face à la suivante exception lors du remplissage du jeu de données à partir du XML avec la méthode ReadXml:

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


Here is an example d'un fichier XML qui est récupéré

Notez qu'il y a un Artist imbriqué dans le fichier XML, et je suppose évidemment que c'est la raison de l'exception.


Ma question, comment puis-je éviter cela? En ce qui concerne les tables imbriquées

Répondre

3

Autant que je sache, les DataSets ne sont pas destinés à contenir n'importe quel type de XML. Avez-vous vraiment besoin d'un jeu de données dans ce cas?

Je suggère de passer à linq 2 xml ou XmlDocument pour manipuler les résultats du service Web.

+0

commencé à utiliser Linq2Xml avec un XDocument –

1

Je pense que la réponse de Freddy a du mérite, mais vous pourriez être en mesure de définir le schéma DataSet manuellement avant que ReadXml soit invoqué, au lieu de s'appuyer sur le XML pour définir le schéma.

Vous pouvez également essayer de séparer ReadXml de GetResponse et d'exécuter un xslt avant l'appel de ReadXml, c'est-à-dire rendre le schéma compatible avec un DataSet.

coup long ... éteignez DataSet.EnforceConstraints

Questions connexes