.Net Trasformazione di grandi documenti XML con XSL
-
06-07-2019 - |
Domanda
Domanda: qual è il modo migliore per trasformare un grande documento XML (> 200 MB) usando XSL in .Net?
Sfondo: Ho un'applicazione che mi fornisce file di dati di grandi dimensioni, non posso cambiare il formato. In passato sono stato in grado di tradurre file di dati più piccoli senza problemi.
Inizialmente stavo lavorando con l'XML come stringhe e la memoria si stava esaurendo molto rapidamente. Ho cambiato il mio codice e ora ho a che fare con MemoryStream per leggere, trasformare usando un foglio di stile e quindi salvare una copia dell'output in una posizione separata usando filestreams.
L'applicazione del foglio di stile fa sì che l'applicazione consumi fino a 1 GB di memoria e alla fine si blocchi.
So che potrei elaborare programmaticamente l'XML usando il DOM, ma mi piacerebbe davvero attenermi a un metodo generico per applicare un foglio di stile XSL.
Qualcuno ha qualche suggerimento su come potrei gestire meglio la memoria durante l'elaborazione della trasformazione XSL? Di seguito è riportato un frammento di codice in cui sto applicando la trasformazione:
'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
'...
Gli esempi C # o VB vanno bene, posso lavorare con entrambi ... Questa app mi ha tramandato, quindi non critiche per il VB, per favore :) -J
Soluzione
Stai utilizzando un MemoryStream ed esaurisci la memoria. Hmmm ...
Forse usi invece un FileStream?
Altri suggerimenti
Prova a utilizzare XPathDocument invece di XMLReader. È ottimizzato e molto più veloce.
D