C # XslCompiledTransform utilizzando XmlDocument o XPathDocument quando editing è necessaria?
-
19-09-2019 - |
Domanda
Io vado su un paio di ipotesi qui:
- XPathDocument non è modificabile.
- XmlDocument è modificabile.
- XPathDocument è più efficiente per XslCompiledTransform.
Stando così le cose (e vi prego di correggermi se sbaglio), sarebbe meglio (più efficiente) a:
- apportare modifiche utilizzando la XmlDocument, poi convertire in un XPathDocument prima del trasformare. C'è un modo ottimizzato per fare questo?
- Basta rimanere con il XmlDocument attraverso la trasformazione.
Alcuni di fondo, sto diventando un xml complesso da un webservice, quindi utilizzare XPath per trovare alcuni elementi che devono essere modificati, quindi utilizzare un XSLT per creare html.
Grazie in anticipo per l'aiuto.
Soluzione
Dipende da quanto la modifica è necessaria, quanto grande i dati sono, e se si ha familiarità con XSLT. Se "non" fino all'ultimo, basta usare XDocument
etc (l'ultima volta mi sono imbattuto un profilo, XDocument
era più veloce di XmlDocument
per i miei dati - eseguire i propri test). Utilizzare XDocument.Load
/ XDocument.Parse
, trovare il nodo, modificarlo e salvarlo.
Se deve l'uso XSLT, quindi XDocument
in realtà non è un'opzione; una volta che hai caricato in XmlDocument
si potrebbe anche rimanere con XmlDocument
-. non voglio raccomandare l'analisi in una secondo DOM
Naturalmente, rende ci chiediamo: perché modificare il xml fuori di XSLT, se avete intenzione di utilizzare XSLT; forse solo tradurre durante l'XSLT?
Per avere una risposta precisa al 100% per i dati sarà necessario il profilo it, naturalmente. Ma le cose come l'uso appropriato di XSLT raggruppamento costrutti spesso fare un molto differenza più grande di XmlDocument
vs XPathDocument
.
Altri suggerimenti
Basta usare la classe XmlDocument
per la trasformazione. Dovrebbe essere un documento voluminoso di vedere davvero un guadagno di prestazioni. Si consiglia di compilare un esempio statico della classe XslCompiledTransform
se si pensa di utilizzarlo più volte.