使用C#对大型XML文件进行XSLT转换

jvm*_*jvm 5 c# xml xslt

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

我的代码看起来像;

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);
}
Run Code Online (Sandbox Code Playgroud)

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

Dim*_*hev 6

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

有一些simle规则来估计需要多少内存,其中一个说5 * text-size.

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

将文档拆分为较小的部分或等待XSLT 2.1的实现,XSLT 2.1定义了特殊的流指令.与此同时,人们可能会使用Saxon的最新(商业)版本,它实现了流媒体扩展和64GB文档的成功处理.