Caf*_*eek 4 c# xml xslt out-of-memory
我正在使用此扩展方法使用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());
}
}
}
Run Code Online (Sandbox Code Playgroud)
思考?解决方案?等等.
更新:现在这已经解决了,我在验证架构时遇到了问题! 验证大型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;
}
}
Run Code Online (Sandbox Code Playgroud)
BTW,new XmlTextWriter()
从.NET 2.0开始被弃用.请XmlWriter.Create()
改用.与new XmlTextReader()
和相同XmlReader.Create()
.