LINQ模型对比全面剖析
创始人
2024-06-07 13:30:20
0

这里主要介绍DOM模型和LINQ模型操作XML的区别,包括介绍LINQ模型上看出XElement的重要性和使用LINQ操作XML。

下面用代码对比一下:

  1. //DOM模型  
  2. XmlDocument doc = new XmlDocument();  
  3. XmlElement name = doc.CreateElement("name");  
  4. name.InnerText = "Patrick Hines";  
  5. XmlElement phone1 = doc.CreateElement("phone");  
  6. phone1.SetAttribute("type", "home");  
  7. phone1.InnerText = "206-555-0144";         
  8. XmlElement phone2 = doc.CreateElement("phone");  
  9. phone2.SetAttribute("type", "work");  
  10. phone2.InnerText = "425-555-0145";         
  11. XmlElement street1 = doc.CreateElement("street1");         
  12. street1.InnerText = "123 Main St" 
  13. XmlElement city = doc.CreateElement("city");  
  14. city.InnerText = "Mercer Island";  
  15. XmlElement state = doc.CreateElement("state");  
  16. state.InnerText = "WA";  
  17. XmlElement postal = doc.CreateElement("postal");  
  18. postal.InnerText = "68042";  
  19. XmlElement address = doc.CreateElement("address");  
  20. address.AppendChild(street1);  
  21. address.AppendChild(city);  
  22. address.AppendChild(state);  
  23. address.AppendChild(postal)  
  24. XmlElement contact = doc.CreateElement("contact");  
  25. contact.AppendChild(name);  
  26. contact.AppendChild(phone1);  
  27. contact.AppendChild(phone2);  
  28. contact.AppendChild(address);  
  29. XmlElement contacts = doc.CreateElement("contacts");  
  30. contacts.AppendChild(contact);  
  31. doc.AppendChild(contacts); 

 

  1. //LINQ模型  
  2. XElement contacts =  
  3. new XElement("contacts",  
  4. new XElement("contact",  
  5. new XElement("name", "Patrick Hines"),  
  6. new XElement("phone", "206-555-0144",  
  7. new XAttribute("type", "home")),  
  8. new XElement("phone", "425-555-0145"  
  9. new XAttribute("type", "work")),  
  10. new XElement("address",  
  11. new XElement("street1", "123 Main St"),  
  12. new XElement("city", "Mercer Island"),  
  13. new XElement("state", "WA"),  
  14. new XElement("postal", "68042")  
  15. )  
  16. )  
  17. ); 

从对比上我们也可以看出LINQ模型的简单性。我们还可以从LINQ模型上看出XElement的重要性。使用XElement不仅可以从头创建xml文件,还可以使用Load的方法从文件加载。还可以从数据库中取出所需元素,这就要用到LINQ TO SQL的东西了,同样可以从数组中取出元素。操作完成后可以使用Save方法进行保存。

下面简单介绍一下增删查改XML。

  1. //查询  
  2. foreach (c in contacts.Nodes()) ...{  
  3. Console.WriteLine(c);  

我们看到在输出XML元素的时候并不需要对每个元素进行强制的类型转换,这里C#编译器已经做了这些事情,它会在输出的时候调用每个元素的ToString()方法。

  1. //插入元素  
  2. XElement mobilePhone = new XElement("phone", "206-555-0168");  
  3. contact.Add(mobilePhone); 

这里只是很简单的演示一些操作,至于那些复杂的操作,只要DOM模型能实现的LINQ模型就一定能实现。插入的时候还可以使用AddAfterThis和AddBeforeThis等方法,提高效率。

  1. //删除元素  
  2. contact.Element("phone").Remove();  
  3. //删除某一具体元素  
  4. contact.Elements("phone").Remove();  
  5. //删除一组元素  
  6. contacts.Element(contact").Element("address").RemoveContent();  
  7. //删除某一元素内容  
  8. //删除元素还可以使适用SetElement方法,把某一元素设置为null也就是删除了这元素。  
  9. //修改元素  
  10. contact.Element("phone").ReplaceContent("425-555-0155");  
  11. //这里是修改***个phone元素的内容 

当然同样可以使用SetElement方法,这里才是它的用武之地。

从上面简单的介绍我们可以清楚的看到,使用LINQ操作XML是多么的简单,这里使用的C#语法,如果要是使用VB.NET还会更简单。有一些方法在VB.NET中可以使用但是在C#中却没有。毕竟VB.NET是晚绑定语言,可以充分发挥它的优势。

【编辑推荐】

  1. Linq匿名类型简单概述
  2. Linq随机读取数据浅析
  3. Linq Lambda表达式全面分析
  4. Linq扩展方法简单分析
  5. 初探Linq局部变量类型

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
着眼MAC地址,解救无法享受D... 在安装了DHCP服务器的局域网环境中,每一台工作站在上网之前,都要先从DHCP服务器那里享受到地址动...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...