2


0

C#でXMLWriterを使用して大きなxmlを作成する

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と予想されます。

返信してください..

3 Answer


5


私はあなたが単に適切に書き込みを閉じなかったと思う:

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
    }
}

余分な「使用」に注意してください-ライターがいくつかのデータをまだバッファリングしている場合があります。 これは一般に、データの_end_の欠落を説明します。再現可能な例がないと、途中で終了することを明らかに診断することはできません。

注:xmlは大きなファイルに対して_work_しますが、_必ずしも必要_ではありません。数百kでも問題ありません。


3


XmlWriterはまさに大きなXMLファイルを作成するためのツールであり、サイズの制限は基本となるストリームによって決まります。これはファイルシステムであるため、これに空き領域があれば問題ありません。

開始要素を作成するたびに、対応する終了要素を指定する必要があります。そうしないと、例外がスローされます。 問題を説明するコードの完全な例を提供していないため、何が間違っているのかを確実に言うことはできません。

また、コンストラクタでファイル名を指定するときにファイルストリームを使用する必要はありません。

using (var writer = new XmlWriter.Create(@"C:\mydata.xml"))
{
    // TODO: use the writer here
}


3


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はそれほど大きくありません! 心配しないでください! :)

よろしく、

マザル・カリミ