1

どこでも答えを探しましたが、これまでのところ私の質問に答えるものはありません。私が作成しているアプリケーションでは、Bukkit.org から最新の XML アーティファクトを取得する必要があります。ここで、XML アーティファクトを (ブラウザーを介して) 手動で保存し、それをプログラムにロードすると、適切に機能し、期待どおりの形式の XML ファイルが得られます。

ただし、WebClient を使用してファイルにアクセスすると、Webclient がダウンロードするファイルが XML 形式ではないため、問題が発生します。以下にテストケースを入れました。

static void manualLoad()
    {
        //local copy
        XDocument doc = XDocument.Load("artifacts.xml");

        var lol = doc.Descendants("build_number");

        foreach (XElement e in lol)
        {
            Console.WriteLine(e.Value); //correct output
        }
    }

    static void onlineLoad()
    {

        WebClient client = new WebClient();

        //save to local project folder
        client.DownloadFile(new Uri("http://dl.bukkit.org/api/1.0/downloads/projects/bukkit/artifacts/")
            , "C:\\...\\XMLTest\\XMLTest\\bin\\Debug\\lol.xml");

        XDocument doc = XDocument.Load("lol.xml"); //error thrown!


    }

    static void Main(string[] args)
    {
        manualLoad(); //works!
        onlineLoad(); //throws XMLexception: Data at root level is invalid.
        Console.ReadKey();

    }

アクセスしようとしている XML アーティファクトは次のとおりです: Bukkit.org XML Artifact

4

1 に答える 1

6

私はあなたのコードを試していませんが、accept ヘッダーを application/xml に設定する必要があるようです - デフォルトは json のようです。

編集: WebClient でヘッダーを設定できます。

client.Headers.Add("accept", "application/xml");
于 2013-07-14T21:51:16.707 に答える