I'm working on a simple example to update an XML file.
Here is LetterTest.xml
<?xml version="1.0" encoding="utf-8" ?>
<Newsletter>
<Member>
<email>
[email protected]</email>
<create_date>4/11/2009</create_date>
</Member>
<Member>
<email>
[email protected]</email>
<create_date>1/1/2000</create_date>
</Member>
<Member>
<email>
[email protected]</email>
<create_date>11/15/1999</create_date>
</Member>
</Newsletter>
I have an .aspx page that let user type in their email address, which would then be inserted into the file above. Here is the codebehind for that:
Code:
protected void AddEmailButton_Click(object sender, EventArgs e)
{
string filename = "LetterTest.xml";
//open file to update
FileStream fs = new FileStream(filename, FileMode.Open);
//writer setting
XmlWriterSettings xmlW = new XmlWriterSettings();
xmlW.CheckCharacters = true;
xmlW.Indent = true;
XmlDocument document = new XmlDocument();
document.Load(fs);
XPathNavigator navigator = document.CreateNavigator();
navigator.MoveToRoot(); //root
navigator.MoveToFollowing("Newsletter", ""); //Newsletter element
var wnav = navigator.AppendChild();
//create instance of writer
XmlWriter writer = XmlWriter.Create(wnav, xmlW);
//IvalidOperation
//WriteStartDocument cannot be called on writers created with ConformanceLevel.Fragment.
writer.WriteStartElement("Member");
writer.WriteStartElement("email");
writer.WriteValue(AddEmailTextBox.Text.ToString());
writer.WriteEndElement(); //email
writer.WriteStartElement("create_date");
writer.WriteValue(DateTime.Now.ToShortDateString());
writer.WriteEndElement(); //create_date
writer.WriteEndElement(); //Member
writer.Close();
//finished writing, file updated and closed
}
The first WriteStartElement("Member"); throws the "WriteStartDocument cannot be called on writers created with ConformanceLevel.Fragment." error.
I've tried a number of things, but with no success.
Any help would be appreciated to resolve this. Also if you have other suggestion for how to insert data into existing XML file, that would be great.
Thanks in advance ...