我有一些非常大的 XML 文件(800 MB 到 1.5 GB)。我需要对其应用 XSLT。我能够阅读它 XMLTextReader。当我应用 XSLT 转换时,出现 SystemOutOfMemory 异常。
我的代码看起来像;
static void Main(string[] args)
{
XDocument newTree = new XDocument();
XmlTextReader oReader = new XmlTextReader(@"C:\Projects\myxml.xml");
using (XmlWriter writer = newTree.CreateWriter())
{
XslCompiledTransform oTransform = new XslCompiledTransform();
oTransform.Load(@"C:\Projects\myXSLT.xsl");
oTransform.Transform(oReader, writer);
}
Console.WriteLine(newTree);
}
提前致谢。这是非常紧急的。如果我没有得到任何解决方案,我需要将 XML 拆分为更小的 XML 并进行转换。
最佳答案
XSLT 使用 XPath,这需要在内存中维护整个 XML 文档。 因此内存不足的问题是理所当然的。
有一些简单的规则可以估计需要多少内存,其中之一是 5 * text-size
。
因此,对于“典型的 1.5GB XML 文件”,8GB RAM 可能就足够了。
要么将文档拆分成更小的部分,要么等待 XSLT 2.1 的实现,它定义了特殊的流指令。同时,可以使用最新(商业)版本的 Saxon,它实现了流式传输扩展,并且已在 Twitter 上报告了成功处理 64GB 文档的情况。
关于c# - 使用 C# 对大型 XML 文件进行 XSLT 转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3101048/