zoukankan      html  css  js  c++  java
  • Linq学习总结2--Linq to XML

    概述:

    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);


    多多练习方能掌握.

  • 相关阅读:
    中国剩余定理(CRT) & 扩展中国剩余定理(ExCRT)总结
    各种求逆元
    A*(A_star)搜索总结
    线段树总结
    C++的STL
    Unable to make the session state request to the session state server处理方法
    判断UserAgent是否来自微信
    VS2010 EntityFramework Database First
    VS2010类似Eclipse文件查找功能-定位到
    Newtonsoft.Json随手记
  • 原文地址:https://www.cnblogs.com/fanglorry/p/4345569.html
Copyright © 2011-2022 走看看