簡體   English   中英

在C#中使用XMLWriter創建大型xml

[英]Creating large xml using XMLWriter in C#

我試圖使用XMLWriter創建一個包含大數據的xml,該函數執行時沒有任何異常。但是當我打開XML時,我發現創建的XML不完整,它在中途被破壞。我不知道我做錯了什么。是否有XMLWriter的默認大小限制? XMLWriter是創建大型XML的最佳方式嗎? 如果沒有,請告訴我什么是創建大型xml的最佳方法? 使用XDocument是否讓我的生活更輕松?

這是我的代碼結構(我不能把我的原始代碼放在這里!! :()

using (//file stream)
{
     XmlWriter mywriter = new XmlWriter.Create(@"C:\mydata.xml");
       // write start element1
       // write start element2

                     while (//not end of file)
                    {
                    switch (entrytype)
                    {
                        Case 1:
                           // create elements
                        Case 2:
                           // create elements
                        so on ....
                    }
                    }

       // write end element2
       // write endelement1
}

XML的大小預計為幾百KB。

請回復..

我懷疑你沒有正確關閉寫入:

using (//file stream)
{
     using(XmlWriter mywriter = new XmlWriter.Create(@"C:\Auditlog.xml")) {
       // write start element1
       // write start element2

                     while (//not end of file)
                    {
                    switch (entrytype)
                    {
                        Case 1:
                           // create elements
                        Case 2:
                           // create elements
                        so on ....
                    }
                    }

       // write end element2
       // write endelement1
    }
}

注意額外using - 沒有編寫器可能仍然有一些數據仍然緩沖。 這通常會占到缺少結束的數據; 如果沒有可重復的例子,我們就無法診斷它在中途退出。

另請注意:xml 適用於大文件,但它不一定是最好的choce - 幾百k應該沒問題。

XmlWriter正是用於創建大型XML文件的工具,大小限制將由基礎流決定,在您的情況下是文件系統,因此只要您有可用空間,就應該沒問題。

每次編寫一個start元素時,都應確保提供相應的end元素,否則將拋出異常。 您沒有提供說明問題的代碼的完整示例,因此無法確定是什么問題。

在構造函數中指定文件名時,也不需要使用文件流:

using (var writer = new XmlWriter.Create(@"C:\mydata.xml"))
{
    // TODO: use the writer here    
}
using (//file stream)
{
     using(XmlWriter mywriter = new XmlWriter.Create(@"C:\Auditlog.xml")) {
       // write start element1
       // write start element2

                     while (//not end of file)
                    {
                    switch (entrytype)
                    {
                        Case 1:
                           // create elements
                        Case 2:
                           // create elements
                        so on ....
                    }
                    }

       // write end element2
       // write endelement1

       mywriter.Close();

    }
}

幾百KB不是那么大! 別擔心! :)

問候,

Mazhar Karimi

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM