当使用XmlNode.AppendChild
方法时,它是从字面上追加到现有文件还是写入一个全新的(附加)文件?XmlNode.AppendChild,它是否真的追加?
微软是quite unclear与此。
当使用XmlNode.AppendChild
方法时,它是从字面上追加到现有文件还是写入一个全新的(附加)文件?XmlNode.AppendChild,它是否真的追加?
微软是quite unclear与此。
由@Alexei回答,AppendChild
只追加加载到内存中的XML树。
但是如果您问的是XmlDocument.Save()
方法,那么会将内存中的完整XML树重写为输出流。
这可以用这段代码进行验证 -
using (FileStream fs = new FileStream(@"E:\Sample.xml",
FileMode.Open, FileAccess.ReadWrite, FileShare.Read))
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(fs);
// Do same changes, like AppendChild on root element
xmlDoc.Save(fs);
}
当你再次加载该文件,你会看到完整的XML树(更新一个)是re-written
原始的XML树下面。
XmlNode.AppendChild
不附加或修改任何文件。它修改在内存中加载的Xml树。
如果你想修改文件,你需要保存结果(如文章中所述)。
我对这个问题并不完全清楚。我的意思是,一旦'.Save()'被调用,它会追加还是重写整个文件? –