Reputation: 291
I am fairly new to all of this and am struggling to find the answer, so any pointers in the right direction would be great.
I have an XML file from a system that I have no control over and it produces it like this:
<?xml version="1.0" ?>
<WatchConfig>
<ProcessList>
<Process>
<RunOnDesktop>0</RunOnDesktop>
<DaysToKeepBackup>10</DaysToKeepBackup>
<Scheduler>
<Active>-1</Active>
<Startup>0</Startup>
<SelfRepl>0</SelfRepl>
<MaxPercent>0</MaxPercent>
<Delay>4</Delay>
<AsSoon>-1</AsSoon>
<OneTime>0</OneTime>
<Period>0</Period>
<Week>1</Week>
<Interval>2</Interval>
</Scheduler>
<UniqueName>0ZISFZL6O6S5001</UniqueName>
<Name>Process1</Name>
<Group/>
<MetaFileName/>
</Process>
<Process>
<RunOnDesktop>0</RunOnDesktop>
<DaysToKeepBackup>10</DaysToKeepBackup>
<Scheduler>
<Active>0</Active>
<Startup>0</Startup>
<SelfRepl>0</SelfRepl>
<MaxPercent>20</MaxPercent>
<Delay>4</Delay>
<AsSoon>-1</AsSoon>
<OneTime>0</OneTime>
<Period>0</Period>
<Week>1</Week>
<Interval>2</Interval>
</Scheduler>
<UniqueName>00ZJENPXPX1KL07</UniqueName>
<Name>Process2</Name>
<Group/>
<MetaFileName/>
</Process>
</ProcessList>
</WatchConfig>
What I would like to be able to do is to read through this and amend the Active value under the Scheduler node, ideally being able to specify the name of the process that I want to amend.(as there are two in this example)
Upvotes: 1
Views: 170
Reputation: 273264
Easiest with XLinq:
var doc = XDocument.Load(fileName);
var p = doc.Descendants("Process")
.Where(e => e.Element("UniqueName").Value == procName )
.Single();
var a = p.Element("Scheduler").Element("Active");
a.Value = "+1";
doc.Save(outFileName);
Upvotes: 3
Reputation: 63
Maybe you can try with something like LINQ
U can do this to load the XML
using System;
using System.Collections.Generic;
using System.Linq;
using System.Xml.Linq;
public class EmployeeServices
{
XElement _empXml = XElement.Load(@"employees.xml");
}
//And then to query the information u can do this
public List<string> GetDepartments()
{
//query the XML and group by department
// select only the departments in the group
var deptQuery =
from emp in _empXml.Descendants("Employee")
group emp by emp.Element("Department").Value
into empGroup
select empGroup.First().Element("Department").Value;
return deptQuery.ToList();
}
This is an example took from the MCTS book, hope it helps.
Upvotes: 1