C # XslCompiledTransform utilisant XmlDocument ou XPathDocument lors de la modification est nécessaire?
-
19-09-2019 - |
Question
Je vais sur un couple d'hypothèses ici:
- XPathDocument est pas modifiable.
- XmlDocument est modifiable.
- XPathDocument est plus efficace pour XslCompiledTransform.
Cela étant le cas (et s'il vous plaît me corriger si je me trompe), serait-il mieux (plus efficace) à:
- modifications à l'aide de la XmlDocument, puis convertir en un XPathDocument avant la transformation. Est-il un moyen optimisé pour le faire cela?
- Il suffit de coller avec le XmlDocument par la transformation.
Un peu d'histoire, je reçois un xml complexe d'un webservice, puis utilisez XPath pour trouver des éléments qui doivent être modifiés, puis utilisez un xslt pour créer html.
Merci d'avance pour l'aide.
La solution
Cela dépend de la quantité de modification est nécessaire, la taille des données est, et si vous êtes familier avec xslt. Si « non » à la dernière, il suffit d'utiliser XDocument
etc (dernière fois que je courais un profil, XDocument
était plus rapide que XmlDocument
pour mes données - exécuter vos propres tests). Utilisez XDocument.Load
/ XDocument.Parse
, trouvez votre noeud, modifiez-le et enregistrez-le.
Si vous doit utilisation xslt, alors XDocument
n'est pas vraiment une option; une fois que vous avez chargé dans XmlDocument
vous pourriez aussi bien rester avec XmlDocument
-. Je ne recommanderais pas l'analyse syntaxique dans secondes DOM
Bien sûr, il fait on se demande: pourquoi modifier le xml en dehors de xslt si vous allez utiliser xslt; peut-être juste traduire au cours de la xslt?
Pour obtenir une réponse précise à 100% pour vos données vous aurez besoin de profil, bien sûr. Mais les choses telles que l'utilisation appropriée des constructions de regroupement xslt feront souvent beaucoup plus de différence que XmlDocument
vs XPathDocument
.
Autres conseils
Il suffit d'utiliser la classe XmlDocument
pour la transformation. Il devrait être un énorme document pour voir vraiment un gain de performance. Vous pouvez compiler une instance statique de la classe XslCompiledTransform
si vous prévoyez de l'utiliser plusieurs fois.