我尝试了一些将新子添加到 XML 文件的代码。我注意到使用 XmlDocument.Load(String filename) 和 XmlDocument.Load(FileStream fs) 时结果不同。下面显示了原始 XML 文件数据。
<?xml version="1.0" encoding="utf-8"?>
<grandparent>
<parent>
<child>
<grandchild>some text here</grandchild>
</child>
<child>
<grandchild>another text here</grandchild>
</child>
</parent>
</grandparent>
下面显示了使用 XmlDocument.Load(String filename) 附加子元素的 C# 代码
XmlDocument doc = new XmlDocument();
doc.Load(filename);
XmlNode child= doc.CreateNode(XmlNodeType.Element, "child", null);
XmlNode grandchild = doc.CreateNode(XmlNodeType.Element, "grandchild", null);
grandchild.InnerText = "different text here";
child.AppendChild(grandchild);
doc.SelectSingleNode("//grandparent/parent").AppendChild(child);
doc.Save(filename);
结果 XML 文件工作正常,如下所示。
<?xml version="1.0" encoding="utf-8"?>
<grandparent>
<parent>
<child>
<grandchild>some text here</grandchild>
</child>
<child>
<grandchild>another text here</grandchild>
</child>
<child>
<grandchild>different text here</grandchild>
</child>
</parent>
</grandparent>
但是,如果我要使用 XmlDocument.Load(FileStream fs) 如下所示
FileStream fs = new FileStream(filename, FileMode.Open)
XmlDocument doc = new XmlDocument();
doc.Load(fs);
XmlNode child= doc.CreateNode(XmlNodeType.Element, "child", null);
XmlNode grandchild = doc.CreateNode(XmlNodeType.Element, "grandchild", null);
grandchild.InnerText = "different text";
child.AppendChild(grandchild);
doc.SelectSingleNode("//grandparent/parent").AppendChild(child);
doc.Save(fs);
fs.Close();
结果 XML 文件会很奇怪,就像再次复制整个 XML 文件一样,如下所示。
<?xml version="1.0" encoding="utf-8"?>
<grandparent>
<parent>
<child>
<grandchild>some text here</grandchild>
</child>
<child>
<grandchild>another text here</grandchild>
</child>
</parent>
</grandparent><?xml version="1.0" encoding="utf-8"?>
<grandparent>
<parent>
<child>
<grandchild>some text here</grandchild>
</child>
<child>
<grandchild>another text here</grandchild>
</child>
<child>
<grandchild>different text here</grandchild>
</child>
</parent>
</grandparent>
有人能告诉我为什么吗?提前致谢。