C # XslCompiledTransform usando XmlDocument o XPathDocument cuando se requiere la edición?
-
19-09-2019 - |
Pregunta
Me voy de un par de supuestos aquí:
- XPathDocument no se puede editar.
- XmlDocument es editable.
- XPathDocument es más eficiente para XslCompiledTransform.
En ese caso (y por favor, corríjanme si me equivoco), sería mejor (más eficiente) a:
- hacer modificaciones utilizando el XmlDocument, a continuación, convertir a una XPathDocument antes de la transformación. ¿Hay una forma optimizada que hacer esto?
- Sólo se adhieren a la XmlDocument a través de la transformación.
Algunos antecedentes, me estoy poniendo un xml compleja desde un servicio web, a continuación, utilizar XPath para encontrar algunos elementos que necesitan ser modificados, a continuación, utilizar un XSLT para crear html.
Gracias de antemano por la ayuda.
Solución
Depende de la cantidad de modificación que se requiere, qué tan grande es que los datos, y si usted está familiarizado con XSLT. Si "no" a la última, sólo tiene que utilizar XDocument
etc (la última vez me encontré con un perfil, XDocument
era más rápido que XmlDocument
para mis datos - ejecutar sus propias pruebas). Utilice XDocument.Load
/ XDocument.Parse
, encontrar su nodo, editarlo y guardarlo.
Si debe el uso de XSLT, entonces XDocument
no es realmente una opción; una vez que haya cargado en XmlDocument
que también podría mantenerse con XmlDocument
-. Yo no recomendaría el análisis en un segundo DOM
Por supuesto, hace que nos preguntamos: ¿por qué modificar el XML fuera de XSLT si se va a utilizar XSLT; tal vez sólo traducir durante el XSLT?
Para obtener un 100% de respuesta precisa para sus datos que necesita para el perfil it, por supuesto. Pero las cosas tales como el uso adecuado de las construcciones XSLT agrupación menudo harán un más diferencia más grande que XmlDocument
vs XPathDocument
.
Otros consejos
Sólo tiene que utilizar la clase XmlDocument
para la transformación. Tendría que ser un enorme documento para ver realmente una ganancia de rendimiento. Es posible que desee compilar una instancia estática de la clase XslCompiledTransform
si planea usar varias veces.