XmlDocument,XDocument相互转换

  1. using System;
  2. using System.Xml;
  3. using System.Xml.Linq;
  4. namespace MyTest
  5. {
  6. internal class Program
  7. {
  8. private static void Main(string[] args)
  9. {
  10. var xmlDocument = new XmlDocument();
  11. xmlDocument.LoadXml("<Root><Child>Test</Child></Root>");
  12. var xDocument = xmlDocument.ToXDocument();
  13. var newXmlDocument = xDocument.ToXmlDocument();
  14. Console.ReadLine();
  15. }
  16. }
  17. public static class DocumentExtensions
  18. {
  19. public static XmlDocument ToXmlDocument(this XDocument xDocument)
  20. {
  21. var xmlDocument = new XmlDocument();
  22. using(var xmlReader = xDocument.CreateReader())
  23. {
  24. xmlDocument.Load(xmlReader);
  25. }
  26. return xmlDocument;
  27. }
  28. public static XDocument ToXDocument(this XmlDocument xmlDocument)
  29. {
  30. using (var nodeReader = new XmlNodeReader(xmlDocument))
  31. {
  32. nodeReader.MoveToContent();
  33. return XDocument.Load(nodeReader);
  34. }
  35. }
  36. }
  37. }

如果您正在使用3.0或更低,您必须使用XmlDocument aka经典的DOM API。同样地,你会发现有一些其他api可以期待

如果你想要选择,我将彻底推荐使用LINQ to XML XDocument aka。这是更简单的创建文件和处理它们。例如,它的区别

  1. XmlDocument doc = new XmlDocument();
  2. XmlElement root = doc.CreateElement("root");
  3. root.SetAttribute("name", "value");
  4. XmlElement child = doc.CreateElement("child");
  5. child.InnerText = "text node";
  6. root.AppendChild(child);
  7. doc.AppendChild(root);
  8. and
  9. XDocument doc = new XDocument(
  10. new XElement("root",
  11. new XAttribute("name", "value"),
  12. new XElement("child", "text node")));

Namespaces are pretty easy to work with in LINQ to XML, unlike any other XML API I've ever seen:

  1. XNamespace ns = "http://somewhere.com";
  2. XElement element = new XElement(ns + "elementName");
  3. // etc

LINQ to XML also works really well with LINQ - its construction model allows you to build elements with sequences of sub-elements really easily:

  1. // Customers is a List<Customer>
  2. XElement customersElement = new XElement("customers",
  3. customers.Select(c => new XElement("customer",
  4. new XAttribute("name", c.Name),
  5. new XAttribute("lastSeen", c.LastOrder)
  6. new XElement("address",
  7. new XAttribute("town", c.Town),
  8. new XAttribute("firstline", c.Address1),
  9. // etc
  10. ));

XmlDocument,XDocument相互转换的更多相关文章

  1. C# XML技术总结之XDocument 和XmlDocument

    引言 虽然现在Json在我们的数据交换中越来越成熟,但XML格式的数据还有很重要的地位. C#中对XML的处理也不断优化,那么我们如何选择XML的这几款处理类 XmlReader,XDocument ...

  2. XML技术总结之XDocument 和XmlDocument

    引言 虽然现在Json在我们的数据交换中越来越成熟,但XML格式的数据还有很重要的地位. C#中对XML的处理也不断优化,那么我们如何选择XML的这几款处理类 XmlReader,XDocument ...

  3. Binding笔记

    Binding基础  绑定某个对象的属性值到控制上,写法如下: public class Order : INotifyPropertyChanged//只要实现此接口 { public event ...

  4. Binding

    Binding基础  绑定某个对象的属性值到控制上,写法如下: public class Order : INotifyPropertyChanged//只要实现此接口 { public event  ...

  5. .NETCore3.1中的Json互操作最全解读-收藏级

    前言 本文比较长,我建议大家先点赞.收藏后慢慢阅读,点赞再看,形成习惯! 我很高兴,.NETCore终于来到了3.1LTS版本,并且将支持3年,我们也准备让部分业务迁移到3.1上面,不过很快我们就遇到 ...

  6. C#加载XML方式

    //path:xml文件路径  SECSMessage:xml文件的根元素下的第一个子集元素 <SECSLibrary> <SECSMessage> <Descripti ...

  7. Roslyn+T4+EnvDTE项目完全自动化 (一)

    前言 以前做一个金融软件项目,软件要英文.繁体版本,开始甲方弄了好几个月,手动一条一条替换,发现很容易出错,因为有金融专业术语,字符串在不同语义要特殊处理,第三方工具没法使用.最后我用Roslyn写了 ...

  8. XmlValidationHelper XSD、Schema(XmlSchemaSet)、XmlReader(XmlValidationSettings)、XmlDocument、XDocument Validate

    namespace Test { using Microshaoft; using System; using System.Xml; using System.Xml.Linq; class Pro ...

  9. 将XmlDocument转换成XDocument

    XmlDocument xml=new XmlDocument(); xml.LoadXml(strXmlText); XmlReader xr=new XmlNodeReader(xml); XDo ...

随机推荐

  1. 《Programming WPF》翻译 第8章 3.Storyboard

    原文:<Programming WPF>翻译 第8章 3.Storyboard Storyboard是动画的集合.如果你使用了标记,所有的动画必须要被定义在一个Storyboard中.(在 ...

  2. ElasticSearch大批量数据入库

    最近着手处理大批量数据的任务. 现状是这样的,一个数据采集程序承载大批量数据的存储和检索.后期可能需要对大批量数据进行统计. 数据分布情况 13个点定时生成采集结果到4个文件(小文件生成周期是5分钟) ...

  3. mybatis和hibernate对比

    Hibernate是一个数据库表和java对象之间完全映射的框架,java开发人员直接对java对象操作,而不对数据库表进行操作: Mybatis是对SQL语句和java对象进行映射,仍需要开发人员编 ...

  4. 自定义ScrollViewer的Touch事件--触摸上下移动ScrollViewer滚动到指定位置

    double mPointY;//触摸点的Y坐标 double mOffsetY;//滚动条当前位置 bool mIsTouch = false;//是否触摸 //触摸事件 private void ...

  5. DBA 经典面试题(1)

    1:列举几种表连接方式 hash join.  merge join. nest loop join(cluster join). index join    2:不借助第三方工具,怎样查看sql的执 ...

  6. 值传递 & 引用传递

    以下程序的输出结果是? public class Example { String str = new String("good"); char[] ch = { 'a', 'b' ...

  7. Atitit. 最佳实践 QA----减少cpu占有率--cpu占用太高怎么办

    Atitit. 最佳实践 QA----减少cpu占有率--cpu占用太高怎么办 跟个磁盘队列长度雅十,一到李80%走不行兰.... 1. 寻找线程too 多的.关闭... Taskman>> ...

  8. IoC容器Autofac正篇之依赖注入(六)

    依赖注入,这个专业词我们可以分为两个部分来理解: 依赖,也就是UML中描述事物之间关系的依赖关系,依赖关系描述了事物A在某些情况下会使用到事物B,事物B的变化会影响到事物A: 注入,医生通过针头将药物 ...

  9. MongoDB学习笔记06

    在shell中删除一个集合,执行db.test.drop()或者db.runCommand({"drop":"test"}),在MongoDB中命令其实是作为一 ...

  10. 更新Android SDK 出错 Failed to rename directory \temp\ToolPackage.old01

    打算更新Android SDK 版本到 Android SDK Tools 20,打开SDK Manager.exe 开始更新,结果安装时弹出错误提示:Failed to rename directo ...