I was using this extension method to transform very large xml files with an xslt.
Unfortunately, I get an OutOfMemoryException on the source.ToString() line.
I realize there must be a better way, I'm just not sure what that would be?
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());
}
}
}
Thoughts? Solutions? Etc.
UPDATE: Now that this is solved, I have issues with validating the schema! Validating large Xml files
Try this:
BTW,
new XmlTextWriter()
is deprecated as of .NET 2.0. UseXmlWriter.Create()
instead. Same withnew XmlTextReader()
andXmlReader.Create()
.For large XML files you can try to use XPathDocument as suggested in Microsoft Knowledge Base article.