asp.net Linq to Xml学习笔记

  加上之前学习过Linq to Entity,因此学习起来也比较随心应手。

  以下是项目中某个底层的代码,记下做个备忘,如果能给新手学习Linq to Xml带来帮助,那就再好不过了

  XML文件的格式:

  

复制代码 代码如下:

  <?xml version="1.0" encoding="utf-8"?>

  <configuration>

  <OPsystemConfig>

  <MemberCenter>

  <DomainName>DomainName</DomainName>

  <ProtocolName>ProtocolName</ProtocolName>

  <APIKey>APIKey</APIKey>

  <AESKey>AESKey</AESKey>

  <AESVI>AESVI</AESVI>

  </MemberCenter>

  <ChildSystems>

  <ChildSystem>

  <Name>Content</Name>

  <ControllerName>ContentManager</ControllerName>

  </ChildSystem>

  <ChildSystem>

  <Name>Image</Name>

  <ControllerName>ImageManager</ControllerName>

  </ChildSystem>

  <ChildSystem>

  <Name>Comment</Name>

  <ControllerName>CommentManager</ControllerName>

  </ChildSystem>

  <ChildSystem>

  <Name>Vote</Name>

  <ControllerName>VoteManager</ControllerName>

  </ChildSystem>

  </ChildSystems>

  </OPsystemConfig>

  </configuration>

  XML增,删,改,查

  

复制代码 代码如下:

  private string docName = string.Empty;//配置文件路径

  #region ISystemModuleConfigService 成员

  /// <summary>

  /// 添加

  /// </summary>

  /// <param name="name"></param>

  /// <param name="controllerName"></param>

  /// <returns></returns>

  public bool Add(string name, string controllerName)

  {

  XDocument xDoc = Load(docName);

  if (IsExist(name))

  {

  xDoc.Element("configuration").Element("OPsystemConfig").Element("ChildSystems").Add(new XElement("ChildSystem",

  new XElement("Name",name),

  new XElement("ControllerName",controllerName)));

  xDoc.Save(docName);

  return true;

  }

  return false;

  }

  /// <summary>

  /// 修改

  /// </summary>

  /// <param name="name"></param>

  /// <param name="controllerName"></param>

  /// <returns></returns>

  public bool Modify(string name, string controllerName)

  {

  XDocument xDoc = Load(docName);

  if (!IsExist(name))

  {

  var query = from Opsystem in xDoc.Descendants("ChildSystem")

  where Opsystem.Element("Name").Value == name

  select Opsystem;

  foreach (XElement item in query)

  {

  item.Element("ControllerName").Value = controllerName;

  }

  xDoc.Save(docName);

  return true;

  }

  return false;

  }

  /// <summary>

  /// 删除

  /// </summary>

  /// <param name="name"></param>

  /// <returns></returns>

  public bool Remove(string name)

  {

  XDocument xDoc = Load(docName);

  if (!IsExist(name))

  {

  var query = from Opsystem in xDoc.Descendants("ChildSystem")

  where Opsystem.Element("Name").Value == name

  select Opsystem;

  query.Remove();

  xDoc.Save(docName);

  return true;

  }

  return false;

  }

  /// <summary>

  /// 获得列表

  /// </summary>

  /// <returns></returns>

  public IList<SystemModuleConfig> GetList()

  {

  XDocument xDoc = Load(docName);

  List<SystemModuleConfig> list = new List<SystemModuleConfig>();

  var query = from Opsystem in xDoc.Descendants("ChildSystem")

  select new

  {

  Key = Opsystem.Element("Name").Value,

  Value = Opsystem.Element("ControllerName").Value

  };

  foreach (var item in query)

  {

  SystemModuleConfig config = new SystemModuleConfig();

  config.Name = item.Key;

  config.ControllerName = item.Value;

  list.Add(config);

  }

  return list;

  }

  /// <summary>

  /// 获得一条ChildSystem数据

  /// </summary>

  /// <param name="name"></param>

  /// <returns></returns>

  public SystemModuleConfig GetModel(string name)

  {

  XDocument xDoc = Load(docName);

  SystemModuleConfig model = new SystemModuleConfig();

  var query = from Opsystem in xDoc.Descendants("ChildSystem")

  where Opsystem.Element("Name").Value == name

  select new

  {

  Name = Opsystem.Element("Name").Value,

  ControllerName = Opsystem.Element("ControllerName").Value

  };

  foreach (var item in query)

  {

  model.Name = item.Name;

  model.ControllerName = item.ControllerName;

  }

  return model;

  }

  /// <summary>

  /// 加载Config文件

  /// </summary>

  /// <param name="path"></param>

  /// <returns></returns>

  public XDocument Load(string path)

  {

  docName = path;

  FileInfo file = new FileInfo(docName);

  file.IsReadOnly = false;

  return XDocument.Load(docName);

  }

  /// <summary>

  /// 验证Name=name的ChildSystem数据是否存在

  /// </summary>

  /// <param name="name"></param>

  /// <returns></returns>

  private bool IsExist(string name)

  {

  XDocument xDoc = Load(docName);

  var query = from Opsystem in xDoc.Descendants("ChildSystem")

  where Opsystem.Element("Name").Value == name

  select new

  {

  Name = Opsystem.Element("Name").Value

  };

  if (query.Count() == 0)

  {

  return true;

  }

  return false;

  }