我对这一切都很陌生,并且很难找到答案,所以任何正确方向的指针都会很棒。
我有一个我无法控制的系统的XML文件,它产生如下:
<?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>
我希望能够做的是阅读这个并修改Scheduler节点下的Active值,理想情况下能够指定我想要修改的进程的名称。(因为这里有两个)例如)
答案 0 :(得分:3)
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);
答案 1 :(得分:1)
也许你可以试试像LINQ
这样的东西你可以这样做来加载XML
using System;
using System.Collections.Generic;
using System.Linq;
using System.Xml.Linq;
public class EmployeeServices
{
XElement _empXml = XElement.Load(@"employees.xml");
}
//然后查询信息你可以做到这一点
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();
}
这是MCTS书中的一个例子,希望它有所帮助。