概述:

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进行操作了.

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

         public static bool addElement(XElement xeleNode,string addEleType, string strContralName,string strContent)
{
XElement xeleChild = new XElement(addEleType);
xeleChild.Add(new XAttribute(strContralName,strContent));
//判斷有木有此子控件
if ( xeleNode.Elements().Count() > && xeleNode.Elements().Where(p => p.Attribute(strContralName).Value == strContent).Count() > )
return false;
xeleNode.Add(xeleChild); return true; } public static bool addAttr(XElement xeleNode, Dictionary<string, string> dic)
{
bool flag = true;
foreach (KeyValuePair<string, string> pair in dic)
{
if (xeleNode.Elements().Where(p => p.Attribute("Name").Value == pair.Key).Count() > )
{
flag = false;
continue;
}
XElement xeleChild = new XElement("Attribute");
xeleChild.Add(new XAttribute("Name",pair.Key.ToString()));
xeleChild.Value = pair.Value.ToString();
xeleNode.Add(xeleChild);
}
return flag;
}

删除和修改节点

...
//修改节点
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);

多多练习方能掌握.

Linq学习总结2--Linq to XML的更多相关文章

  1. Linq学习<五> 运用linq查询Xml

    这节将学习如何用 linq查询xml 一.我们先看看在xml中我们怎么操作 public void xmlWayToQueryXmlFile() { XmlDocument xmldoc = new ...

  2. Linq学习之旅——LINQ查询表达式

    1. 概述 2. from子句 3. where子句 4. select子句 5. group子句 6. into子句 7. 排序子句 8. let子句 9. join子句 10. 小结 1. 概述 ...

  3. Linq学习(一)-初涉Linq

    一.何谓LINQ LINQ:Language Integrated Query语言集成查询,其本质是对ADO.NET结果集通过反射连同泛型特性转换成对象集,实现OR模型的转换 二.优点与缺点 优点:封 ...

  4. LINQ to XML LINQ学习第一篇

    LINQ to XML LINQ学习第一篇 1.LINQ to XML类 以下的代码演示了如何使用LINQ to XML来快速创建一个xml: public static void CreateDoc ...

  5. Linq学习笔记---Linq to Xml操作

    LINQ to XML的成员, 属性列表: 属性 说明 Document 获取此 XObject 的 XDocument  EmptySequence  获取空的元素集合  FirstAttribut ...

  6. (转)Linq学习笔记

    写在前面 最近在看Linq,在博客园看到这篇文章,写的通俗易懂,转来和大家一起做个分享.原文地址http://www.cnblogs.com/goscan/archive/2011/05/05/Lin ...

  7. C#之Linq学习笔记【转】

    写在前面 其实在09年就已经学习过Linq了,并被她那优美的语法所吸引,只是现在所在的公司还在使用VS2005在.Net2.0的框架下面的开发,所以Linq也很久没有用过了,最近看部门的同事对这个有些 ...

  8. Linq学习以及简单用法

    Linq学习 Linq(language Intergrated Query)即语言集成查询 LINQ是一组语言特性和API,使得你可以使用统一的方式编写各种查询.用于保存和检索来自不同数据源的数据, ...

  9. linq学习笔记

    最近在学习linq的一些基础知识,看了c#高级编程及阅读了园子内部几篇优秀的博文,有所体会,感觉应该记录下来,作为以后复习使用.都是一些最基础的知识,大致分为三个部分:linq预备知识:linq查询: ...

  10. Linq学习工具及Lamada表达式

    好东西.转载一个.以备学习 Linq学习工具:     http://www.linqpad.net/ Lamada表达式: Func<int, int, int> IntPow = (x ...

随机推荐

  1. 更改make/bison的版本

    一.make版本 1.下载make的压缩包 ftp://ftp.gnu.org/gnu/make/ 2.解压,安装 cd make-x.x ./configuration sh build.sh su ...

  2. C#快捷键

    home:光标所在这一行的最前面 end:光标所在这一行的最后面 pg up:光标所在这一页最前一行的前面 pg dn:光标所在这一页最后一行的最后 shift+home:光标所在这一行之前的所有代码 ...

  3. cocos2d-x的CCAffineTransform相关变换实现原理

    稍有opengl或3d基础的都知道平移/旋转/缩放这几个基本模型视图变换的实现原理, 最近看了下cocos2d-x相关部分的实现, 了解了这些实现那些各种坐标变换基本不在话下了, cocos2d-x本 ...

  4. easyui datagrid 分页

    //初始化dategrid $('#tt').datagrid({ url:null, pagination:true, pageSize:, pageNumber:, rownumbers:true ...

  5. C++中的const和指针组合

    在C++里,const修饰指针有以下三种情况 (1)指针常量:即指向常量的指针 const  int *p或者int const *p const在*前,,可以这样理解它的功能,因为const在*前, ...

  6. Eclipse 创建maven项目

    新建maven project

  7. Web cookie 详解

    总结:服务端客户端变量建议都是用 utf-8字符集, 前后传递的变量都建议使用url编码处理.php setcookie 保存到客户端的变量会自动url编码的, 所以客户端获取后需要decodeURI ...

  8. pandas修改列的顺序

    http://www.cnblogs.com/zhoudayang/p/5414020.html cols = list(ret)cols.insert(0,cols.pop(cols.index(' ...

  9. LeetCode 4 Median of Two Sorted Arrays 查找中位数,排除法,问题拓展 难度:1

    思路:设现在可用区间在nums1是[s1,t1),nums2:[s2,t2) 1.当一个数组可用区间为0的时候,由于另一个数组是已经排过序的,所以直接可得 当要取的是最小值或最大值时,也直接可得 2. ...

  10. POJ 2229 Sumsets

    Sumsets Time Limit: 2000MS   Memory Limit: 200000K Total Submissions: 11892   Accepted: 4782 Descrip ...