Jul 28
Editing InfoPath 2010 xml with C#
Posted by Wei in C#, InfoPath, SharePoint on 07 28th, 2011| | No Comments »

Here's a code snippet to edit nodes in an existing InfoPath 2010 Xml document from a selected Form Library in SharePoint 2010:

 SPWeb mySite = SPContext.Current.Web;
 SPList oList = mySite.Lists["FormLibraryName"];
 SPQuery oQuery = new SPQuery();
 oQuery.Query = "<Where><Eq><FieldRef Name='FileLeafRef'/><Value Type='Text'>TargetFile.xml</Value></Eq></Where>";
 SPListItemCollection listItems = oList.GetItems(oQuery);

 if (listItems.Count > 0)
 {
  SPListItem item = listItems[0];

  MemoryStream oMemoryStream = new MemoryStream(item.File.OpenBinary());
  XmlTextReader oReader = new XmlTextReader(oMemoryStream);

  XmlDocument oDoc = new XmlDocument();
  oDoc.Load(oReader);

  oReader.Close();
  oMemoryStream.Close();

  XmlNamespaceManager nameSpaceManager = new XmlNamespaceManager(oDoc.NameTable);
  nameSpaceManager.AddNamespace("my", oDoc.DocumentElement.NamespaceURI);

  oDoc.DocumentElement.SelectSingleNode("my:NodeToUpdate", nameSpaceManager).InnerText = "Update text";
  oDoc.DocumentElement.SelectSingleNode("my:Node/my:SubNode", nameSpaceManager).InnerText = "Update text";

  mySite.AllowUnsafeUpdates = true;

  System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
  SPFile oSPFile = mySite.Folders[mwp.FormLibraryName].Files.Add(item.File.Name, (encoding.GetBytes(oDoc.OuterXml)), true);
 }