我的要求是创建xml文件并将xml元素添加到现有的xml文件中。
首先,我尝试通过以下代码创建新的xml文件。
using (XmlWriter xmlWriter = XmlWriter.Create(fStream, xmlSettings))
{
xmlWriter.WriteStartDocument(true);
xmlWriter.WriteStartElement("Friends");
xmlWriter.WriteStartElement("Friend");
xmlWriter.WriteElementString("Name", "Safiq");
xmlWriter.WriteElementString("Like", "Char");
xmlWriter.WriteElementString("Unlike", "anger");
xmlWriter.WriteElementString("Nickname", "good");
xmlWriter.WriteElementString("Gift", "c#");
xmlWriter.WriteEndElement();
xmlWriter.WriteEndElement();
xmlWriter.WriteEndDocument();
xmlWriter.Flush();
}
接下来,我尝试将新元素添加到现有文件中。
XDocument XDOC = XDocument.Load(fStream);
XElement x = new XElement("Friend");
x.Add(new XElement("Name", "Safiq"));
x.Add(new XElement("Like", "Char"));
x.Add(new XElement("Unlike", "anger"));
x.Add(new XElement("Nickname", "good"));
x.Add(new XElement("Gift", "c#"));
XDOC.Descendants("Friends").Single().Add(x);
XDOC.Save(fStream);
但我得到以下输出。
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Friends>
<Friend>
<Name>Safiq</Name>
<Like>Char</Like>
<Unlike>anger</Unlike>
<Nickname>good</Nickname>
<Gift>c#</Gift>
</Friend>
</Friends>
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<Friends>
<Friend>
<Name>Safiq</Name>
<Like>Char</Like>
<Unlike>anger</Unlike>
<Nickname>good</Nickname>
<Gift>c#</Gift>
</Friend>
<Friend>
<Name>Safiq</Name>
<Like>Char</Like>
<Unlike>anger</Unlike>
<Nickname>good</Nickname>
<Gift>c#</Gift>
</Friend>
</Friends>
哪里出错?
答案 0 :(得分:4)
您正在使用相同的流加载然后保存。加载后,流将定位在文件的末尾...所以当您之后保存文件时,您将从该位置保存。
我建议您使用using
语句加载文档并关闭文件,然后使用另一个using
语句来保存文件:
XDocument doc;
using (var stream = ...)
{
doc = XDocument.Load(stream);
}
// Manipulate doc
using (var stream = ...)
{
doc.Save(stream);
}
答案 1 :(得分:1)
您正在重复使用相同的fileStream ....
XDocument XDOC = XDocument.Load(fStream);
... (nothing with fStream)
XDOC.Save(fStream);
这将在原始文档之后附加新的(正确更改的)文档。
答案 2 :(得分:1)
您需要做的就是将流定位到其内容的开头
using (XmlWriter xmlWriter = XmlWriter.Create(fStream, xmlSettings))
{
xmlWriter.WriteStartDocument(true);
xmlWriter.WriteStartElement("Friends");
xmlWriter.WriteStartElement("Friend");
xmlWriter.WriteElementString("Name", "Safiq");
xmlWriter.WriteElementString("Like", "Char");
xmlWriter.WriteElementString("Unlike", "anger");
xmlWriter.WriteElementString("Nickname", "good");
xmlWriter.WriteElementString("Gift", "c#");
xmlWriter.WriteEndElement();
xmlWriter.WriteEndElement();
xmlWriter.WriteEndDocument();
xmlWriter.Flush();
}
// Reposition The stream
fStream.Position=0;
XDocument XDOC = XDocument.Load(fStream);
XElement x = new XElement("Friend");
x.Add(new XElement("Name", "Safiq"));
x.Add(new XElement("Like", "Char"));
x.Add(new XElement("Unlike", "anger"));
x.Add(new XElement("Nickname", "good"));
x.Add(new XElement("Gift", "c#"));
XDOC.Descendants("Friends").Single().Add(x);
XDOC.Save(fStream);