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

StackOverflow https://stackoverflow.com/questions/1009179

  •  06-07-2019
  •  | 
  •  

Вопрос

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

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

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

Применение таблицы стилей приводит к тому, что приложение потребляет более 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

Это было полезно?

Решение

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

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

Другие советы

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

D

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top