使用XSLT异常转换XML:“System.Text.StringBuilder.ToString()中的System.OutOfMemoryException”

时间:2012-07-24 07:38:42

标签: xml xslt out-of-memory stringbuilder stringwriter

您好我在使用 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()

有人可以提出一些解决这个问题的建议吗?非常感谢。

1 个答案:

答案 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();
}