C# - Как считать непрерывный поток XML по HTTP

Вы можете использовать динамический SQL:

DO
$BEGIN
   EXECUTE format('ALTER TABLE ... AT TIME ZONE %L',
                  (SELECT value FROM atable ...));
END;$;
7
задан 22 April 2009 в 03:16
поделиться

2 ответа

Я делал это раньше, не с XML, а с данными, которые необходимо было проанализировать для изменений состояния приложения. Метод HttpWebResponse.GetResponseStream () прекрасно работал для этого. Обязательно вызовите Close () для этого потока, когда вы закончите. Я предлагаю последний блок.

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

Или, альтернативно:

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();
}
9
ответ дан 6 December 2019 в 23:13
поделиться

Должен быть в состоянии сделать это довольно легко. Вам нужно будет получить поток ответов, вызвав Response.GetResponseStream (), а затем использовать async ResponseStream.BeginRead () в цикле.

В Response не задано время ожидания, но если вы постоянно получаете отправленные данные тогда все должно быть в порядке.

2
ответ дан 6 December 2019 в 23:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: