0

WP で byte[] 配列を XDocument に変換しようとしています。次のコードがあります

 private void btnDownload_Click(object sender, RoutedEventArgs e)
    {
        svc.DownloadFileCompleted += new EventHandler<DownloadFileCompletedEventArgs>(svc_DownloadFileCompleted);
        svc.DownloadFileAsync("XMLFile1.xml");
    }

    void svc_DownloadFileCompleted(object sender, DownloadFileCompletedEventArgs e)
    {
        byte[] bytes = e.Result;
        //string responseText = Encoding.UTF8.GetString(bytes,0,2048);  //  ASCII assumed
        //XDocument respnseXml = XDocument.Load(responseText);
        bytes = NullRemover(bytes);
        using (MemoryStream stream = new MemoryStream(bytes))
        {
            XDocument document = XDocument.Load(stream);
        }
    }
    private byte[] NullRemover(byte[] DataStream)
    {
        int i;
        byte[] temp = new byte[DataStream.Length];
        for (i = 0; i < DataStream.Length - 1; i++)
        {
            if (DataStream[i] == 0x00) break;
            temp[i] = DataStream[i];
        }
        byte[] NullLessDataStream = new byte[i];
        for (i = 0; i < NullLessDataStream.Length; i++)
        {
            NullLessDataStream[i] = temp[i];
        }
        return NullLessDataStream;
    }

ファイルをダウンロードする Web サービスを作成しました。私のコードは正常に動作します。byte[] を XDocument オブジェクトに変換します。この方法が正しいかどうかはわかりません。なぜMemoryStreamを使用する必要があるのですか? byte[]XDocumentに変換する正しい方法はありますか? または、変換する別の方法はありますか?

4

1 に答える 1

0

XDocument をその Uri で直接読み込む可能性を検討してください。

XDocument.Load("localFile.xml")

また

XDocument.Load("http://example.com/remote.xml")

非同期ダウンロードが必須の場合 - まったく問題ありません。ThreadPool を Task として使用して、専用スレッドでダウンロードを整理します。

static void Main(string[] args)
{
    XDocument document = null;

    Task.Factory
        .StartNew(() => document = XDocument.Load("https://dl.dropboxusercontent.com/u/1323651/xml_test.txt"))
        .ContinueWith(t => Console.WriteLine(document.ToString()))
        .Wait();
}
于 2013-07-31T06:25:42.273 に答える