我正在尝试使用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。
请回复..
答案 0 :(得分: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
}
}
注意额外的using
- 如果没有编写者可能仍有一些数据仍然被缓冲。这通常会导致数据缺少 end ;如果没有可重复的例子,我们就无法在中途诊断它。
另请注意:对于大型文件,xml将工作,但它不是必然最好的choce - 几百k应该没问题。
答案 1 :(得分:3)
XmlWriter正是用于创建大型XML文件的工具,大小限制将由基础流决定,在您的情况下是文件系统,因此只要您有可用空间就可以了
每次编写一个start元素时,都应确保提供相应的end元素,否则将抛出异常。您没有提供说明问题的代码的完整示例,因此无法确定是什么问题。
在构造函数中指定文件名时,也不需要使用文件流:
using (var writer = new XmlWriter.Create(@"C:\mydata.xml"))
{
// TODO: use the writer here
}
答案 2 :(得分: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不是那么大!别担心! :)
此致
Mazhar Karimi