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


    多多练习方能掌握.

  • 相关阅读:
    【山外笔记-计算机网络·第7版】第02章:物理层
    【山外笔记-计算机网络·第7版】第01章:计算机网络概述
    【山外笔记-计算机网络·第7版】第13章:计算机网络名词缩写汇总
    【山外笔记-计算机网络·第7版】第10章:计算机网络重要概念
    【山外笔记-工具框架】Netperf网络性能测试工具详解教程
    【山外笔记-工具框架】iperf3网络性能测试工具详解教程
    【山外笔记-黑客基础】Windows PowerShell 脚本学习(上)
    【山外笔记-Linux 命令】cp 命令详解
    【山外笔记-Linux 命令】scp 命令详解
    PCF8591采集温度源码程序---STC89C52实时用PCF8591采集温度LCD显示
  • 原文地址:https://www.cnblogs.com/fanglorry/p/4345569.html
Copyright © 2020-2023  润新知