使用 C# 对大型 XML 文件进行 XSLT 转换 [英] XSLT transformation on Large XML files with C#

查看:31
本文介绍了使用 C# 对大型 XML 文件进行 XSLT 转换的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一些非常大的 XML 文件(800 MB 到 1.5 GB).我需要对此应用 XSLT.我能够读取它 XMLTextReader.当我应用 XSLT 转换时,得到 SystemOutOfMemory Exception.

I have some very large XML files (800 MB to 1.5 GB). I need to apply XSLT on that. I am able to read it XMLTextReader. When i applied XSLT transformation, get SystemOutOfMemory Exception.

我的代码看起来像;

static void Main(string[] args)
{
    XDocument newTree = new XDocument();
    XmlTextReader oReader = new XmlTextReader(@"C:Projectsmyxml.xml");


    using (XmlWriter writer = newTree.CreateWriter())
    {
        XslCompiledTransform oTransform = new XslCompiledTransform();
        oTransform.Load(@"C:ProjectsmyXSLT.xsl");
        oTransform.Transform(oReader, writer);
    }
    Console.WriteLine(newTree);
}

提前致谢.这是非常紧迫的.如果我没有得到任何解决方案,我需要将 XML 拆分为更小的 XML 并进行转换.

Thanks in advance. It is very urgent. If I don't get any solution, I need to split XML into smaller XML and do transformation.

推荐答案

XSLT 使用 XPath,这要求整个 XML 文档都保存在内存中.因此定义为内存不足的问题.

XSLT uses XPath and this requires that the whole XML document be maintained in memory. Thus the problem of insufficient memory is by definition.

有一些简单的规则可以估算需要多少内存,其中之一是5 * text-size.

There are simle rules to approximate how much memory is needed and one of them says 5 * text-size.

因此,对于典型的 1.5GB XML 文件",8GB RAM 可能就足够了.

So, for a "typical 1.5GB XML file" 8GB RAM may be sufficient.

要么将文档拆分成更小的部分,要么等待 XSLT 2.1,它定义了特殊的流指令.与此同时,人们可以使用最新(商业)版本的 Saxon,该版本实现了流媒体的扩展,并在 twitter 上报道了成功处理 64GB 文档.

Either split the document into smaller parts or wait for an implementation of XSLT 2.1, which defines special streaming instructions. In the meantime one may use the latest (commercial) version of Saxon, which implements extensions for streaming and successful processing of 64GB document has been reported on twitter.

这篇关于使用 C# 对大型 XML 文件进行 XSLT 转换的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆