class Program
{
private static string szSiteUrl = "https://xxxxxxx.sharepoint.com/xxxx/xxxxx/";
private static string USERNAME = "xxxxxx";
private static string PASSWORD = "xxxxx";
static void Main(string[] args)
{
UpdateFields();
}
static void UpdateFields()
{
int iItemID = 0;
int iLowerLimit = 1;
int iUpperLimit = 10;
try
{
ClientContext context = new ClientContext(szSiteUrl);
var password = new SecureString();
foreach(char c in PASSWORD.ToCharArray()) password.AppendChar(c);
context.Credentials = new SharePointOnlineCredentials(USERNAME, password);
Web web = context.Web;
List lstName = context.Web.Lists.GetByTitle("xxxxxxxx");
View view = lstName.Views.GetByTitle("xxxxx");
context.Load(view);
context.ExecuteQuery();
CamlQuery query = CamlQuery.CreateAllItemsQuery();
query.ViewXml = "<View><ViewFields><FieldRef Name='ID'/>" +
"<FieldRef Name='FileRef'/>" +
"<FieldRef Name='XXXX'/>" +
"</ViewFields> <RowLimit>10</RowLimit> </View>";
ListItemCollection wifs = lstWorkIntake.GetItems(query);
context.Load(wifs);
context.ExecuteQuery();
Console.WriteLine(wifs.Count);
context.ExecuteQuery();
foreach(ListItem item in wifs)
{
iItemID = Convert.ToInt32(item["ID"]);
if ((iItemID >= iLowerLimit) && (iItemID <= iUpperLimit))
{
ProcessListItem(item, context);
}
}
Console.WriteLine(" Items updated");
Console.ReadLine();
}
catch (Exception ex)
{
Console.WriteLine(iItemID + "--ERROR" + ex.Message);
}
}
private static void ProcessListItem(ListItem item, ClientContext context)
{
context.Load(item.File);
context.ExecuteQuery();
ProcessNode(item, "my:XXXXX", context);
}
private static void ProcessNode(ListItem item, string strNodeName, ClientContext context)
{
Console.WriteLine("Processing Item :" + item.Id + " Field Name: " + strNodeName);
var fileInfo = Microsoft.SharePoint.Client.File.OpenBinaryDirect(context, item["FileRef"].ToString());
try
{
XmlDocument xml = new XmlDocument();
using(Stream stream = fileInfo.Stream)
{
xml.Load(stream);
XmlNodeList nodeList = xml.GetElementsByTagName(strNodeName);
foreach(XmlNode node in nodeList)
{
foreach(XmlNode childNode in node)
{
if (childNode.InnerText != "")
{
if (childNode.InnerText.Contains("false"))
{
childNode.InnerText = "0";
}
if (childNode.InnerText.Contains("true"))
{
childNode.InnerText = "1";
}
}
}
}
byte[] xmlData = System.Text.Encoding.UTF8.GetBytes(xml.OuterXml);
using(MemoryStream ms = new MemoryStream(xmlData))
{
Microsoft.SharePoint.Client.File.SaveBinaryDirect(context, item["FileRef"].ToString(), ms, true);
}
}
}
catch (Exception ex)
{
Console.WriteLine("Error on Item :" + item.Id + " Field Name: " + strNodeName + " Exception Message: " + ex.Message);
}
}
}In O365/Sharepoint Online, if you want to update the xml node values of existing infopath forms, this working code will help you