C# 使用 XmlWriter 附加到 XML 文件
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/9188574/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Append to XML file using XmlWriter
提问by Usher
I'm using XmlDocumentand XmlWriterto append XML into an existing file, but my attempt below is throwing an exception that I don't understand
我使用XmlDocument,并XmlWriter追加XML到现有的文件,但下面我试图抛出一个异常,我不明白
This document already has a 'DocumentElement' node.
此文档已有一个“DocumentElement”节点。
//Append to xml file
XmlDocument doc = new XmlDocument();
doc.Load(@"c:\test.xml");
using (XmlWriter xmlWrite = doc.CreateNavigator().AppendChild())
{
xmlWrite.WriteStartElement("image name=",Name);
xmlWrite.WriteElementString("width", widthValue[1]);
xmlWrite.WriteElementString("Height", heightValue[1]);
xmlWrite.WriteElementString("file-size", FileSizeValue[1]);
xmlWrite.WriteElementString("file-format", FileFormatValue[1]);
xmlWrite.WriteElementString("resolution", ResolutionValue[1]);
xmlWrite.Close();
}
here is my sample test.xml
这是我的示例 test.xml
<job-metadata>
<slug>730s_Sales/CupWinner_0111</slug>
<locations>Africa</locations>
<primary-location>Africa</primary-location>
<reporter>Leigh Sales</reporter>
<genre>Current</genre>
<copyright>CBS</copyright>
<autopublish>true</autopublish>
</job-metadata>
Am trying to append in the xml like below
我正在尝试像下面这样追加 xml
<job-metadata>
<slug>730s_Sales/CupWinner_0111</slug>
<locations>Africa</locations>
<primary-location>Africa</primary-location>
<reporter>Leigh Sales</reporter>
<genre>Current</genre>
<copyright>CBS</copyright>
<autopublish>true</autopublish>
<image name="557684_20111101-730s_SalesCupWinner_0111_80x60.jpg">
<width>80</width>
<height>60</height>
<file-size>7045</file-size>
<file-format>JPEG Baseline</file-format>
<resolution>72</resolution>
<custom-name>newsthumbnail</custom-name>
</image>
</job-metadata>
采纳答案by Pranay Rana
To play with the XML data if you are using .net version 3.5 its better to user LINQ to XML.
如果您使用的是 .net 3.5 版,则要使用 XML 数据最好使用LINQ to XML。
http://www.codeproject.com/Articles/24376/LINQ-to-XML
http://www.codeproject.com/Articles/24376/LINQ-to-XML
or
或者
Manipulate XML data with XPath and XmlDocument (C#)
使用 XPath 和 XmlDocument (C#) 操作 XML 数据
OR
或者
Article : How to Append to a Large XML File
文章 :如何附加到大型 XML 文件
I thnik you need to append node to your xmldocuemnt like this
我想你需要像这样将节点附加到你的 xmldocuemnt
//add to elements collection
doc.DocumentElement.AppendChild(node);
You need to do something like this
你需要做这样的事情
XmlDocument xmlDoc=new XmlDocument();
xmlDoc.Load("F:/Documents and Settings/Administrator/Desktop/Account.xml");
XmlElement subRoot=xmlDoc.CreateElement("User");
//UserName
XmlElement appendedElementUsername=xmlDoc.CreateElement("UserName");
XmlText xmlTextUserName=xmlDoc.CreateTextNode(txtUsrName.Text.Trim());
appendedElementUsername.AppendChild(xmlTextUserName);
subRoot.AppendChild(appendedElementUsername);
xmlDoc.DocumentElement.AppendChild(subRoot);
//Email
XmlElement appendedElementEmail=xmlDoc.CreateElement("Email");
XmlText xmlTextEmail=xmlDoc.CreateTextNode(txtEmail.Text.Trim());
appendedElementEmail.AppendChild(xmlTextEmail);
subRoot.AppendChild(appendedElementEmail);
xmlDoc.DocumentElement.AppendChild(subRoot);
xmlDoc.Save("F:/Documents and Settings/Administrator/Desktop/Account.xml");if(!File.Exists("F:/Documents and Settings/Administrator/Desktop/Account.xml"))
{
XmlTextWriter textWritter=new XmlTextWriter("F:/Documents and Settings/Administrator/Desktop/Account.xml", null);
textWritter.WriteStartDocument();
textWritter.WriteStartElement("USERS");
textWritter.WriteEndElement();
textWritter.Close();
}
XmlDocument xmlDoc=new XmlDocument();
xmlDoc.Load("F:/Documents and Settings/Administrator/Desktop/Account.xml");
XmlElement subRoot=xmlDoc.CreateElement("User");
//UserName
XmlElement appendedElementUsername=xmlDoc.CreateElement("UserName");
XmlText xmlTextUserName=xmlDoc.CreateTextNode(txtUsrName.Text.Trim());
appendedElementUsername.AppendChild(xmlTextUserName);
subRoot.AppendChild(appendedElementUsername);
xmlDoc.DocumentElement.AppendChild(subRoot);
//Email
XmlElement appendedElementEmail=xmlDoc.CreateElement("Email");
XmlText xmlTextEmail=xmlDoc.CreateTextNode(txtEmail.Text.Trim());
appendedElementEmail.AppendChild(xmlTextEmail);
subRoot.AppendChild(appendedElementEmail);
xmlDoc.DocumentElement.AppendChild(subRoot);
xmlDoc.Save("F:/Documents and Settings/Administrator/Desktop/Account.xml");
The result'll be like that:
结果会是这样:
</USERS>
<User>
<UserName>Buggaya</UserName>
<Email>[email protected]</Email>
</User>
</USERS>
orignal post : Append in xml document
原始帖子:附加在 xml 文档中

