Wim*_*ink 187 c# xml linq-to-xml
这是一个非常简单的问题.我使用XDocument生成XML文件.然后我想将它作为XmlDocument类返回.我有一个XmlDocument变量,我需要将其转换回XDocument以追加更多节点.
那么,在XDocument和XmlDocument之间转换XML 的最有效方法是什么?(不使用文件中的任何临时存储.)
Mar*_*man 299
您可以使用内置的xDocument.CreateReader()和XmlNodeReader来回转换.
将其放入Extension方法以使其更易于使用.
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);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
资料来源:
Abh*_*bhi 28
对我来说,这种单线解决方案非常有效
XDocument y = XDocument.Parse(pXmldoc.OuterXml); // where pXmldoc is of type XMLDocument
Run Code Online (Sandbox Code Playgroud)
using System.Xml;
using System.Xml.Linq;
#region Extention Method
public static XElement ToXElement(this XmlElement element)
{
return XElement.Parse(element.OuterXml);
}
public static XmlElement ToXmlElement(this XElement element)
{
var doc = new XmlDocument();
doc.LoadXml(element.ToString());
return doc.DocumentElement;
}
#endregion
Run Code Online (Sandbox Code Playgroud)
使用这种扩展不仅仅是使用这样的东西
System.Xml.XmlElement systemXml = (new XElement("nothing")).ToXmlElement();
System.Xml.Linq.XElement linqXml = systemXml.ToXElement();
Run Code Online (Sandbox Code Playgroud)
如果需要将System.Xml.Linq.XDocument的实例转换为System.Xml.XmlDocument的实例,则此扩展方法将帮助您在生成的XmlDocument实例中不丢失XML声明:
using System.Xml;
using System.Xml.Linq;
namespace www.dimaka.com
{
internal static class LinqHelper
{
public static XmlDocument ToXmlDocument(this XDocument xDocument)
{
var xmlDocument = new XmlDocument();
using (var reader = xDocument.CreateReader())
{
xmlDocument.Load(reader);
}
var xDeclaration = xDocument.Declaration;
if (xDeclaration != null)
{
var xmlDeclaration = xmlDocument.CreateXmlDeclaration(
xDeclaration.Version,
xDeclaration.Encoding,
xDeclaration.Standalone);
xmlDocument.InsertBefore(xmlDeclaration, xmlDocument.FirstChild);
}
return xmlDocument;
}
}
}
Run Code Online (Sandbox Code Playgroud)
希望有所帮助!
| 归档时间: |
|
| 查看次数: |
112972 次 |
| 最近记录: |