.Net使用XSL转换大型XML文档

时间:2009-06-17 19:49:40

标签: .net xml xslt large-files

问题:在.Net中使用XSL转换大型XML文档(> 200MB)的最佳方法是什么?

背景: 我有一个应用程序,为我提供大数据文件,我无法更改格式。在过去,我能够毫无问题地翻译较小的数据文件。

最初我使用XML作为字符串,并且内存很快耗尽。我切换了我的代码,现在我处理MemoryStream来读取,使用样式表进行转换,然后使用文件流将输出的副本保存到一个单独的位置。

应用样式表会导致应用程序消耗超过1GB的内存并最终崩溃。

我知道我可以使用DOM以编程方式处理XML,但我真的很想坚持应用XSL样式表的通用方法。

有没有人对如何在处理XSL转换时更好地管理内存有任何指示?下面是我正在应用转换的代码片段:

'xmlData is a memory stream passed into a function 
        '...
    Dim strfilepath As String = appConfigSettings.FilePaths.XslFilePath & "\" & odtrow.formatterXsl

 Dim xslt As New System.Xml.Xsl.XslCompiledTransform()
 xslt.Load(strfilepath)

 Dim xmlRead As XmlReader = XmlReader.Create(xmlData)

 newStream = New MemoryStream()
 xslt.Transform(xmlRead, Nothing, newStream) 'here is where it fails
 newStream.Position = 0
        '...

C#或VB的例子很好我可以使用...这个应用程序是一个让我失望所以不要批评vb请:) -J

2 个答案:

答案 0 :(得分:1)

您正在使用MemoryStream,但内存不足。嗯...

也许使用FileStream?

答案 1 :(得分:0)

尝试使用XPathDocument而不是XMLReader。它经过优化并且速度更快。

d