LINQ to XML元素概括

在向大家详细介绍LINQ to XML之前,首先让大家了解下LINQ to XML元素,然后全面介绍LINQ to XML。

襄汾网站建设公司成都创新互联,襄汾网站设计制作,有大型网站制作公司丰富经验。已为襄汾数千家提供企业网站建设服务。企业网站搭建\成都外贸网站建设要多少钱,请找那个售后服务好的襄汾做网站的公司定做!

对于LINQ to XML元素的更新操作,关键就是在于查询上面,如何有效并准确的查询到目标元素是一个比较有挑战性的问题,这就像SQL语句一样对于同一个查询不同的写法和关系连接效率就不一样,这个读者需要自己多加练习。在上面的代码段中,我们去查找所有属性为PartNumber=872-AA的元素并将其更新为Hello。那么如果想操作元素值,只需将修改查询条件为:

 
 
 
  1. var partNos = from item in xelem.Descendants("ProductName")  
  2. where item.Value == "Lawnmower"  

XML文档的元素名称更新相比较于值更新要麻烦许多。由于XML文档结构是一个类树形结构,学过数据结构的读者知道要更新一个树节点的指针,最少需要三个步骤:
A. 查找目标树节点的父节点
B. 将先前的节点的孩子转移到新节点
C. 将父节点的子节点替换(如果需要还要用算法重新排序树)。

所以我们也需要用同样的逻辑来处理XML节点的更新。那么相比较DOM文档对象和LINQ to XML元素名称更新操作,LINQ to XML的步骤要简单许多。

 
 
 
  1. XElement xel = XElement.Load(@"example.xml");  
  2. var itemNos = from item in xel.Descendants("Item")  
  3. select item;  
  4. int n = itemNos.Count();  
  5. for (int i=0; i; i++)  
  6. {  
  7. // 新创建节点  
  8. XElement nEl = new XElement("Element");  
  9. // 转移孩子节点  
  10. nEl.Add(itemNos.ElementAt(0).Elements());  
  11. // 替换  
  12. itemNos.ElementAt(0).ReplaceWith(nEl);  
  13. }  
  14. Console.Write(xel);  

上面的代码是将所有名称为Item的元素替换成名称为Element。细心的读者可以看到我在for循环中获取itemNos的孩子都使用0这个索引值,为什么呢?这是因为在枚举器中如果前面的对象消失那么索引位置就会下移,那么当我们替换一个元素后,下一个元素的索引自动变为0,所以我们只要循环指定次数就可以遍历所有元素来。这也是为什么不用foreach的原因。那么我们进一步的出思考XML名称替换这个问题。我们会发现LINQ to XML的XElement类提供了4个方法用来支持该功能:ReplaceAll, ReplaceAttributes, ReplaceNodes和ReplaceWith。这四个方法除了ReplaceWith是操作本元素以为,其他的都是操作元素的孩子或是属性内容。这里提供的好处是如果我们想遍历替换操作,就不必去重复的查询目标元素。

最后,我们讨论一下如何利用LINQ to XML来删除一个元素。对于类树形结构的数据来说,删除一个元素意味着两种情况:一、删除本节点和其所有子节点;二、只删除本节点。而在删除节点之前,我们需要先定位到目标节点,所以要先进行查询操作:

 
 
 
  1. XElement xelem = XElement.Load(@"example.xml");  
  2. var partNos = from item in xelem.Descendants("Item")  
  3. where item.Attributes("PartNumber").Single().Value == "872-AA"  
  4. select item;  
  5. partNos.Remove();  
  6. Console.Write(xelem);  

【编辑推荐】

  1. LINQ Customers类概括
  2. LINQ查询操作全面分析
  3. LINQ to SQL的Table剖析
  4. Linq数据分组全面描述
  5. LINQ查询基础概括

网页标题:LINQ to XML元素概括
文章分享:http://www.shufengxianlan.com/qtweb/news26/539976.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联