Ich habe dies zuvor getan, nicht mit XML, aber mit Daten, die für Zustandsänderungen für eine Anwendung analysiert werden müssen. Die Methode HttpWebResponse.GetResponseStream() hat dafür gut funktioniert. Vergewissern Sie sich, dass Sie Close() in diesem Stream aufrufen, wenn Sie fertig sind. Ich schlage einen Endblock vor.
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();
}
Oder alternativ:
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();
}
Ich denke, es sind einige kleine Korrekturen nötig, damit der Code funktioniert. Es gibt keine 'HttpWebRequest.GetResponseStream()' Methode. Sie müssen ein 'HttpWebResponse'-Objekt mit' HttpWebRequest.GetResponse() 'abfragen und' GetResponseStream() 'darauf aufrufen. Auch im 'finally' Block ist' req' nicht zu verwenden, sondern die zuvor erwähnte 'Response'. – scherand
stimmte zu, ich tippte es einfach aus dem Speicher, nicht aus einem tatsächlichen Projekt. – esac
Wie würde das mit XML funktionieren? Das XML wäre ungültig, bis das ganze XML-Dokument heruntergeladen worden wäre, was den Zweck des Streams vereitelt. – swestner