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. Qt5+VS2013兼容XP方法

    用Qt5+VS2013编译程序默认配置会在XP运行时报"不是有效的Win32程序"工作需要必须要XP运行 pro文件中加一句: 复制代码 QMAKE_LFLAGS_WINDOWS ...

  2. idea

    一. 常用快捷键 搜索class Ctrl+N 搜索文件 Ctrl+Alt+N 当前窗口查找/全工程查找 Ctrl+F/Ctrl+Shift+F,F3/Shift+F3前后移动 上/下一个位置 Ctr ...

  3. boost库使用:vs2013下boost::container::vector编译出错解决

    boost版本:boost_1_55_0 bug报告地址 https://svn.boost.org/trac/boost/ticket/9332 出错信息 has_member_function_c ...

  4. MySQL数据备份之mysqldump

      mysqldump常用于MySQL数据库逻辑备份 1.各种用法说明 A. 最简单的用法: mysqldump -uroot -pPassword [database name] > [dum ...

  5. c++智能指针《二》 std::tr1::shared_ptr

    转载http://www.cnblogs.com/kadinzhu/archive/2011/12/12/2284826.html 看<effective c++>,作者一直强调用std: ...

  6. hdu 5288 OO’s Sequence(计数)

    Problem Description OO has got a array A of size n ,defined a function f(l,r) represent the number o ...

  7. C#中,表达式的计算遵循一个规律:从左到右依次计算。

    int i = 0; int j = (i++)+(i++)=(i++)+i=i+++i=i+++i++=1;

  8. pyqt tabWidget例子学习1

    from PyQt4 import QtGui from PyQt4 import QtCore from PyQt4.QtCore import pyqtSlot,SIGNAL,SLOT impor ...

  9. java与.net比较学习系列(7) 属性

    文章摘自:http://www.cnblogs.com/mcgrady/p/3411405.html 说起属性,实际上java中没有属性这个概念,只有字段和方法,但是可以通过私有字段和声明get,se ...

  10. Linux入门基础 #8:Linux拓展权限

    本文出自   http://blog.csdn.net/shuangde800 ------------------------------------------------------------ ...