0

嗨,我在使用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.Text.StringBuilder.ToString() 在 System.IO.StringWriter.ToString()

任何人都可以提供一些解决此问题的建议吗?提前非常感谢。

4

1 回答 1

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();
}
于 2012-07-24T12:10:45.763 回答