您好我在使用 XSLT 转换 XML 时面临严重问题:
System.Xml.Xsl.XslTransform XSLTR = new System.Xml.Xsl.XslTransform();
XSLTR.Transform(XPathNavigator input, XsltArgumentList args, TextWriter output);
我输入了有20,000行的XML。它会引发以下错误:
System.OutOfMemoryException:抛出了类型'System.OutOfMemoryException'的异常。在System.IO.StringWriter.ToString()的System.Text.StringBuilder.ToString()
有人可以提出一些解决这个问题的建议吗?非常感谢。
答案 0 :(得分:3)
尽量避免将转换结果存储在字符串中,如果您希望将文件作为转换结果,那么Transform
方法会出现重载,允许您写入FileStream
:
XslCompiledTransform proc = new XslCompiledTransform();
proc.Load("sheet.xsl");
using (FileStream fs = File.OpenWrite("result.xml"))
{
proc.Transform(xmlDocumentInstance, null, fs);
}
如果您想要XmlDocument
作为结果,您可以按如下方式实现:
XmlDocument resultDoc = new XmlDocument();
using (XmlWriter xw = resultDocument.CreateNavigator().AppendChild())
{
proc.Transform(xmlInputDocumentInstance, null, xw);
xw.Close();
}