转换大型Xml文件

我正在使用此扩展方法使用xslt转换非常大的xml文件。

不幸的是,我在source.ToString()行上得到了OutOfMemoryException。

我意识到必须有一个更好的方法,我只是不确定那会是什么?

public static XElement Transform(this XElement source, string xslPath, XsltArgumentList arguments) { var doc = new XmlDocument(); doc.LoadXml(source.ToString()); var xsl = new XslCompiledTransform(); xsl.Load(xslPath); using (var swDocument = new StringWriter(System.Globalization.CultureInfo.InvariantCulture)) { using (var xtw = new XmlTextWriter(swDocument)) { xsl.Transform((doc.CreateNavigator()), arguments, xtw); xtw.Flush(); return XElement.Parse(swDocument.ToString()); } } } 

思考? 解决方案? 等等。

更新:现在这已经解决了,我在validation架构时遇到了问题! validation大型Xml文件

试试这个:

 using System.Xml.Linq; using System.Xml.XPath; using System.Xml.Xsl; static class Extensions { public static XElement Transform( this XElement source, string xslPath, XsltArgumentList arguments) { var xsl = new XslCompiledTransform(); xsl.Load(xslPath); var result = new XDocument(); using (var writer = result.CreateWriter()) { xsl.Transform(source.CreateNavigator(), arguments, writer); } return result.Root; } } 

顺便说一句,从.NET 2.0开始,不推荐使用new XmlTextWriter() 。 请改用XmlWriter.Create() 。 与new XmlTextReader()XmlReader.Create()

对于大型XML文件,您可以尝试使用Microsoft知识库文章中建议的XPathDocument。

 XPathDocument srcDoc = new XPathDocument(srcFile); XslCompiledTransform myXslTransform = new XslCompiledTransform(); myXslTransform.Load(xslFile); using (XmlWriter destDoc = XmlWriter.Create(destFile)) { myXslTransform.Transform(srcDoc, destDoc); }