.Net Преобразование больших XML-документов с помощью XSL - PullRequest
2 голосов
/ 17 июня 2009

Вопрос: Каков наилучший способ преобразования большого документа XML (> 200 МБ) с использованием XSL в .Net?

Справочная информация: У меня есть приложение, которое передает мне большие файлы данных, я не могу изменить формат. В прошлом мне удавалось переводить небольшие файлы данных без проблем.

Изначально я работал с XML в виде строк и очень быстро исчерпывал память. Я переключил свой код и теперь имею дело с MemoryStream для чтения, преобразования с использованием таблицы стилей, а затем сохранения копии выходных данных в отдельном месте с использованием файловых потоков.

Применение таблицы стилей приводит к тому, что приложение потребляет более 1 ГБ памяти и в конечном итоге происходит сбой.

Я знаю, что мог бы программно обрабатывать XML с использованием DOM, но я действительно хотел бы придерживаться универсального метода применения таблицы стилей 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 ]

1 голос
/ 18 июня 2009

Вы используете MemoryStream, и у вас заканчивается память. Ммм ...

Может, вместо этого использовать FileStream?

0 голосов
/ 02 ноября 2009

Попробуйте использовать XPathDocument вместо XMLReader. Это оптимизировано и намного быстрее.

D

...