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

C# 在C中使用XMLWriter创建大型xml#,c#,xml,C#,Xml,我试图使用XMLWriter创建一个包含大量数据的xml,函数执行时没有任何异常。但是当我打开xml时,发现创建的xml不完整,中途被破坏。我不知道我做错了什么。XMLWriter有默认大小限制吗?XMLWriter是创建大型XML的最佳方法吗?如果没有,请告诉我创建大型xml的最佳方法是什么?使用XDocument是否让我的生活更轻松 这是我的代码结构(我不能把我的原始代码放在这里!!:() XML的大小预计为几百KB 请回复..我怀疑您只是没有正确关闭写入: using (//file st

我试图使用XMLWriter创建一个包含大量数据的xml,函数执行时没有任何异常。但是当我打开xml时,发现创建的xml不完整,中途被破坏。我不知道我做错了什么。XMLWriter有默认大小限制吗?XMLWriter是创建大型XML的最佳方法吗?如果没有,请告诉我创建大型xml的最佳方法是什么?使用XDocument是否让我的生活更轻松

这是我的代码结构(我不能把我的原始代码放在这里!!:()

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
    }
}
请注意使用-的额外的
,否则写入程序可能仍有一些数据处于缓冲状态。这通常会导致数据的结尾缺失;如果没有可复制的示例,我们显然无法在中途对其进行诊断

另外请注意:xml适用于大文件,但它不一定是最好的choce-不过几百k也可以。

正是创建大xml文件的工具,大小限制将由底层流决定,在您的情况下,底层流是文件系统,因此只要您在这方面有可用空间,它就应该是可以的

每次编写开始元素时,都应确保提供相应的结束元素,否则将引发异常。您尚未提供代码的完整示例来说明问题,因此无法确定问题出在哪里

此外,在构造函数中指定文件名时,不需要使用文件流:

using (var writer = new XmlWriter.Create(@"C:\mydata.xml"))
{
    // TODO: use the writer here    
}
几百KB没那么大!别担心!:)

问候,


马扎尔·卡里米(Mazhar Karimi)

你说“破碎”是什么意思?当您尝试打开它时会出现什么错误?“断开”表示xml中最后几个节点没有关闭,最后一个节点的值也不完整!!!谢谢你所有的问题都解决了,当我使用额外的“使用”它工作。
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();

    }
}