2010-10-13 4 views

Répondre

0

Une meilleure façon est

XmlDocument xdoc; 
xdoc = new XmlDocument(); 
xdoc.Load(XmlReader.Create("weblink")); 

Le XDocument est impossible à analyser et extraire ses valeurs XML qui est possible dans XmlDocument

4

Vous pouvez passer une adresse URL pour XmlReader:

using (var reader = XmlReader.Create("http://example.com/somexml")) 
{ 
    // TODO: parse 
} 

Une autre possibilité est d'utiliser XDocument:

var doc = XDocument.Load("http://example.com/somexml"); 
// TODO: manipulate the document 

Et encore une autre possibilité est d'utiliser un WebClient:

using (var client = new WebClient()) 
{ 
    string xml = client.DownloadString("http://example.com/somexml"); 
    // TODO: feed the xml to your favorite XML parser 
} 
+0

On ne sait pas pour moi si XDocument.Load sera * fait * travail avec un URI. La documentation suggère qu'il s'agit de * fichiers * plutôt que d'URI, bien que ce serait un peu un départ. –

+0

@Jon, ça marche, l'a testé. En interne, la méthode fait exactement ce que vous avez écrit dans votre réponse avec un petit ajout de 'XmlReaderSettings'. –

+0

Cool ... et le nom du paramètre est définitivement suggestif, ce que j'avais manqué aussi. Oops :) –

3

Si les paramètres sont dans la requête string, il est assez facile ... J'utiliser XmlReader.Create selon la réponse de Darin, et pour la facilité de travailler avec le XML, j'utiliser LINQ to XML:

XDocument doc; 
using (var reader = XmlReader.Create("http://example.com/somexml")) 
{ 
    doc = XDocument.Load(reader); 
} 
// Now work with doc 

(EDIT: Comme Darin note , XDocument.Load(string uri) rend cette simple -. ignorer le fait que les documents disent qu'il charge les données d'un fichier )

Si vous avez besoin de plus de contrôle sur le côté HTTP des choses (par exemple d'inclure des données post), vous pouvez utiliser quelque chose comme:

WebRequest request = WebRequest.Create(...); 
// Fiddle with request here 

XDocument doc; 
using (WebResponse response = request.GetResponse()) 
using (Stream data = response.GetResponseStream()) 
{ 
    doc.Load(data); 
} 
// Use doc here 

Notez que cela est synchrone - l'analyse syntaxique tout est possible aussi de manière asynchrone, mais plus de travail.

Questions connexes