概述:

linq to xml(下面简称ltx好了),是微软根据linq技术对于XML的CURD.使用起来比System.XML中的XML操作方式更加简便.这段时间使用它在公司里升级了老板的邮件系统,颇有心得,现在总结一下.

主要对象:

1.XDocument:XML文档对象,载入方式是根据其静态方法载入XML文档: XDocument xDoc = XDocument.load(@"**xml路径**")

  .Element("NodeName") 获得子节点XElement对象,XDoc下一般是根节点

  .Sava("xmlpath") 保存文档到xml文件

XElement xele =  xdocTypeDef.Element("root").Elements().Where(p => p.Attribute("Name").Value == strTopName).Single();

2.XElement:节点对象

  .Element("NodeName") 获得子节点XElement对象

  .Elements() 返回子节点集合

  .Elements("NodeName")返回名字是"NodeName"的子节点集合

  .Add(param[] obj) 增加的可以是多个节点或是属性

  .Remove() 将节点删除.

  .value 节点属性

3.XAttribute:属性对象

 

知道这些就可以在结合linq就可以对XML进行操作了.

 

 

下面是最近的小项目中为节点增加子节点和属性的部分源码:

 1         public static bool addElement(XElement xeleNode,string addEleType, string strContralName,string strContent)
 2         {
 3             XElement xeleChild = new XElement(addEleType);
 4             xeleChild.Add(new XAttribute(strContralName,strContent));
 5             //判斷有木有此子控件
 6             if ( xeleNode.Elements().Count() > 0 && xeleNode.Elements().Where(p => p.Attribute(strContralName).Value == strContent).Count() > 0)
 7                 return false;
 8             xeleNode.Add(xeleChild);
 9             
10             return true;
11             
12         }

13 
14         public static bool  addAttr(XElement xeleNode, Dictionary<string, string> dic)
15         {
16             bool flag = true;
17             foreach (KeyValuePair<string, string> pair in dic)
18             {
19                 if (xeleNode.Elements().Where(p => p.Attribute("Name").Value == pair.Key).Count() > 0)
20                 {
21                     flag = false;
22                     continue;
23                 }
24                 XElement xeleChild = new XElement("Attribute");
25                 xeleChild.Add(new XAttribute("Name",pair.Key.ToString()));
26                 xeleChild.Value = pair.Value.ToString();
27                 xeleNode.Add(xeleChild);
28             }
29             return flag;
30         }
View Code

删除和修改节点

...
//修改节点
 XElement xele =  XEleFirstNode.Elements().Where(p => p.Attribute("Name").Value == strContralName ).Single() as XElement;
            xele =  xele.Elements().Where(p => p.Attribute("Name").Value == strAttr).Single() as XElement;
            xele.Value = strAttrDes;
            xDoc.Save(strPath);

...


//del node
if (MessageBox.Show("確定刪除?", "警告", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.No)
                return;
            foreach(object str  in lBAtrributes.SelectedItems) //listbox mutiselect
            {
                string strAttr = str.ToString();
                XElement xeleAttr = XEleSecondNode.Elements().Where(p => p.Attribute("Name").Value == strAttr).Single() as XElement;
                xeleAttr.Remove();
            }
            xDoc.Save(strPath);


多多练习方能掌握.