通过HTTP检索XML并写入文件的问题

时间:2009-07-03 14:55:34

标签: c# .net visual-studio

我写了一个小的scraper,用于通过HTTP打开与远程服务器上的PHP脚本的连接,并将它找到的一些XML泵入本地文件。

不完全是火箭科学,我知道。

下面的代码是整个刮刀(清理和匿名)。

此代码工作正常,除了一个小细节,似乎无论XML文件的大小(1 MB或7 MB),生成的XML文件总是缺少一小部分(600-800个字符) 。

备注:

  • 如果我在Firefox中打开php页面 - 我的整个文档都没问题。

  • 如果我启动wireshark并运行下面的程序,我会看到整个文档通过网络传输,但没有写入文件。

using System;
using System.IO;
using System.Collections.Generic;
using System.Text;

namespace myNameSpace
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Write("BEGIN TRANSMISSION\n");
                writeXMLtoFile();
            Console.Write("END TRANSMISSION\n");
        }


        public static void writeXMLtoFile()
        {
            String url = "http://somevalidurl.com/dataPage.php?lotsofpars=true";
            TextWriter tw = new StreamWriter("xml\\myFile.xml");
            tw.Write(ScreenScrape(url));
            Console.Write(" ... DONE\n");
            tw.Close();
        }
        public static string ScreenScrape(string url)
        {
            System.Net.WebRequest request = System.Net.WebRequest.Create(url);
            using (System.Net.WebResponse response = request.GetResponse())
            {
                using (System.IO.StreamReader reader = new System.IO.StreamReader(response.GetResponseStream()))
                {
                    return reader.ReadToEnd();

                }
            }
        }
    }
}

using System; using System.IO; using System.Collections.Generic; using System.Text; namespace myNameSpace { class Program { static void Main(string[] args) { Console.Write("BEGIN TRANSMISSION\n"); writeXMLtoFile(); Console.Write("END TRANSMISSION\n"); } public static void writeXMLtoFile() { String url = "http://somevalidurl.com/dataPage.php?lotsofpars=true"; TextWriter tw = new StreamWriter("xml\\myFile.xml"); tw.Write(ScreenScrape(url)); Console.Write(" ... DONE\n"); tw.Close(); } public static string ScreenScrape(string url) { System.Net.WebRequest request = System.Net.WebRequest.Create(url); using (System.Net.WebResponse response = request.GetResponse()) { using (System.IO.StreamReader reader = new System.IO.StreamReader(response.GetResponseStream())) { return reader.ReadToEnd(); } } } } }

我应该使用不同的作家吗?我已经尝试过TextWriter和StreamWriter同样的效果。

来自冰岛的亲切问候,

Gzur

3 个答案:

答案 0 :(得分:1)

尝试:

XmlDocument doc = new XmlDocument();
doc.Load(url);
doc.Save(filename);

这真的很容易(显然有一些错误处理)。 .Net框架应该为您做一切。我大约一个月前跳过篮球试图做同样的事情并在我阅读XmlDocument上的帮助文件时踢了一脚;)

答案 1 :(得分:1)

此外,如果您真的只想将页面下载到文件系统,请调查WebClient.DownloadFile方法:)

答案 2 :(得分:0)

可能就像在StreamWriter上调用Flush()一样简单,但为什么要让自己的生活变得艰难?用以下代码替换整个writeXMLtoFile函数:

public static void writeXMLtoFile()
{
    string url = "http://somevalidurl.com/dataPage.php?lotsofpars=true";
    string xml = ScreenScrape(url);
    File.WriteAllText("xml\\myFile.xml", xml);
}

这样,你也可以使用调试器来查看发生了什么(检查xml变量)。