Je l'ai déjà fait, pas avec XML, mais avec des données qui devaient être analysées pour les changements d'état d'une application. La méthode HttpWebResponse.GetResponseStream() a bien fonctionné pour cela. Assurez-vous d'appeler Close() sur ce flux lorsque vous avez terminé. Je suggère un blocage définitif.
HttpWebRequest req;
try
{
req = (HttpWebRequest)WebRequest.Create("http://www.example.com");
Stream stream = req.GetResponseStream();
byte[] data = new byte[4096];
int read;
while ((read = data.Read(data, 0, data.Length)) > 0)
{
Process(data, read);
}
}
finally
{
if (req != null)
req.Close();
}
Ou encore:
HttpWebRequest req;
try
{
req = (HttpWebRequest)WebRequest.Create("http://www.example.com");
Stream stream = req.GetResponseStream();
XmlTextReader reader = new XmlTextReader(stream);
while (reader.Read())
{
switch (reader.NodeType)
{
case XmlNodeType.Element:
Console.Write("<{0}>", reader.Name);
break;
case XmlNodeType.Text:
Console.Write(reader.Value);
break;
case XmlNodeType.CDATA:
Console.Write("<![CDATA[{0}]]>", reader.Value);
break;
case XmlNodeType.ProcessingInstruction:
Console.Write("<?{0} {1}?>", reader.Name, reader.Value);
break;
case XmlNodeType.Comment:
Console.Write("<!--{0}-->", reader.Value);
break;
case XmlNodeType.XmlDeclaration:
Console.Write("<?xml version='1.0'?>");
break;
case XmlNodeType.Document:
break;
case XmlNodeType.DocumentType:
Console.Write("<!DOCTYPE {0} [{1}]", reader.Name, reader.Value);
break;
case XmlNodeType.EntityReference:
Console.Write(reader.Name);
break;
case XmlNodeType.EndElement:
Console.Write("</{0}>", reader.Name);
break;
}
}
}
finally
{
if (req != null)
req.Close();
}
Je pense qu'il y a quelques petites corrections nécessaires pour que le code fonctionne. Il n'y a pas de méthode 'HttpWebRequest.GetResponseStream()'. Vous devez obtenir un objet 'HttpWebResponse' en utilisant' HttpWebRequest.GetResponse() 'et appeler' GetResponseStream() 'sur cela. Toujours dans le bloc 'finally',' req' ne doit pas être utilisé, mais la 'Response' mentionnée ci-dessus. – scherand
convenu, je l'ai juste tapé de la mémoire, pas d'un projet réel. – esac
Comment cela fonctionnerait-il avec XML? Le XML serait invalide jusqu'à ce que l'ensemble du document XML a été téléchargé, ce qui va à l'encontre du but du streaming. – swestner