C# - 如何通过HTTP读取连续的XML流 [英] C# - How to read a continuous stream of XML over HTTP

查看:143
本文介绍了C# - 如何通过HTTP读取连续的XML流的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图找出从服务中获取连续XML数据流的最佳方法,该服务将数据作为常量Feed通过HTTP发送。



<我正在考虑使用HttpWebRequest / Response,但我不确定如果数据只是连续流式传输会如何。



有什么想法吗?

解决方案

之前我已经完成了这项工作,而不是使用XML,而是需要为应用程序的状态更改解析数据。 HttpWebResponse.GetResponseStream()方法对此工作正常。完成后,请务必在此流上调用Close()。我建议使用finally块。

  HttpWebRequest req; 

尝试
{
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);
}
}
最后
{
if(req!= null)
req.Close();
}

或者,或者:

  HttpWebRequest req; 

尝试
{
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);
休息;
case XmlNodeType.Text:
Console.Write(reader.Value);
休息;
case XmlNodeType.CDATA:
Console.Write(<![CDATA [{0}]]>,reader.Value);
休息;
case XmlNodeType.ProcessingInstruction:
Console.Write(<?{0} {1}?>,reader.Name,reader.Value);
休息;
case XmlNodeType.Comment:
Console.Write(<! - {0} - >,reader.Value);
休息;
case XmlNodeType.XmlDeclaration:
Console.Write(<?xml version ='1.0'?>);
休息;
case XmlNodeType.Document:
break;
case XmlNodeType.DocumentType:
Console.Write(<!DOCTYPE {0} [{1}],reader.Name,reader.Value);
休息;
case XmlNodeType.EntityReference:
Console.Write(reader.Name);
休息;
case XmlNodeType.EndElement:
Console.Write(< / {0}>,reader.Name);
休息;
}

}
}
最后
{
if(req!= null)
req.Close();
}


I am trying to figure out the best way to consume a continuous stream of XML data from a service that is sending the data as a "constant" feed over HTTP.

I was considering using HttpWebRequest/Response but I am not sure how that will behave if the data just continuously streams.

Any thoughts?

解决方案

I have done this before, not with XML, but with data that needed to be parsed for state changes for an application. HttpWebResponse.GetResponseStream() method worked fine for this. Make sure to call Close() on this stream when you are done. I suggest a finally block.

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();
}

Or, alternatively:

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();
}

这篇关于C# - 如何通过HTTP读取连续的XML流的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆