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

标签 c# xml xslt

我有一些非常大的 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/

相关文章:

XSLT 2.0 一个元素适用于不同情况(@mode 不起作用)

xml - 将多个命名空间添加到输出 XML 时出错

xslt - XML 元素有命名空间,我的 XPATH 不起作用

c# - 服务器上的全局自定义类

c# - 如何设置主机头 IIS 7 出现错误?网站

c# - 如何使用 Json.NET 将 XML 序列化为 JSON 对象

xml - XML 标记中的句点

css - 模板 Blogger 的响应式 @media-queries 设置

c# - asp.net mvc批处理(外部线程)挂起,也许超时?

c# - WCF 内存急剧增加