XmlDocument,XDocument相互转换
using System; using System.Xml; using System.Xml.Linq; namespace MyTest { internal class Program { private static void Main(string[] args) { var xmlDocument = new XmlDocument(); xmlDocument.LoadXml("<Root><Child>Test</Child></Root>"); var xDocument = xmlDocument.ToXDocument(); var newXmlDocument = xDocument.ToXmlDocument(); Console.ReadLine(); } } public static class DocumentExtensions { public static XmlDocument ToXmlDocument(this XDocument xDocument) { var xmlDocument = new XmlDocument(); using(var xmlReader = xDocument.CreateReader()) { xmlDocument.Load(xmlReader); } return xmlDocument; } public static XDocument ToXDocument(this XmlDocument xmlDocument) { using (var nodeReader = new XmlNodeReader(xmlDocument)) { nodeReader.MoveToContent(); return XDocument.Load(nodeReader); } } } }
如果您正在使用3.0或更低,您必须使用XmlDocument aka经典的DOM API。同样地,你会发现有一些其他api可以期待
如果你想要选择,我将彻底推荐使用LINQ to XML XDocument aka。这是更简单的创建文件和处理它们。例如,它的区别
XmlDocument doc = new XmlDocument(); XmlElement root = doc.CreateElement("root"); root.SetAttribute("name", "value"); XmlElement child = doc.CreateElement("child"); child.InnerText = "text node"; root.AppendChild(child); doc.AppendChild(root); and XDocument doc = new XDocument( new XElement("root", new XAttribute("name", "value"), 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:
XNamespace ns = "http://somewhere.com"; XElement element = new XElement(ns + "elementName"); // 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:
// Customers is a List<Customer> XElement customersElement = new XElement("customers", customers.Select(c => new XElement("customer", new XAttribute("name", c.Name), new XAttribute("lastSeen", c.LastOrder) new XElement("address", new XAttribute("town", c.Town), new XAttribute("firstline", c.Address1), // etc ));