如何阅读和编辑XML节点

时间:2012-10-03 17:53:14

标签: c# xml

我对这一切都很陌生,并且很难找到答案,所以任何正确方向的指针都会很棒。

我有一个我无法控制的系统的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值,理想情况下能够指定我想要修改的进程的名称。(因为这里有两个)例如)

2 个答案:

答案 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书中的一个例子,希望它有所帮助。