6
votes

Appliquer XSLT sur XML en mémoire et retourner en mémoire XML

Je recherche une fonction statique dans la structure .NET qui prend un extrait XML et un fichier XSLT, applique la transformation en mémoire et renvoie le XML transformé.

Je voudrais faire cela: xxx

alternativement, au lieu de prendre et de retourner des chaînes, il pourrait être de prendre et de retourner xmlnodes.

est une telle fonction?


0 commentaires

3 Réponses :


1
votes

Avez-vous remarqué qu'il y ait le XslcompiledTransform classe ?


2 commentaires

Oui. Mais cette classe n'a que des noms de fichiers, des flux, des lecteurs ou des écrivains comme arguments d'entrée pour sa méthode de transformation. Cela implique beaucoup de gâcher avec des MemorMstreams pour accomplir une transformation simple sur un extrait de XML en mémoire.


Xmldocument implémente ixpathnavigable, de sorte que vous pouvez le transmettre directement. Pour la sortie, voir Stackoverflow.com/Questtions/1346995/...



7
votes

Vous pouvez utiliser le stringreader et stritter classes: xxx


3 commentaires

Comme il est évidemment est un xmldocument déjà (il utilise ... .document.innerxml ), en utilisant stringreader semble superflu.


... et assez inefficace car le XML est sérialisé à une chaîne puis analysé à nouveau.


Ce n'est pas, en fait. On dirait que, mais c'est le SDK OpenXML pour la lecture de fichiers DOCX qui a une API très similaire à l'API XMLDOCUMUMUMUMENT, et les API ne sont pas compatibles. Je pense donc que le bowvote n'est pas justifié par cela.



5
votes

Un peu de connaissances est que vous pouvez en réalité transformer des données directement en un xmldocument code> DOM ou dans un fichier LINQ-TO-XML xelement code> ou xdocument code> (via la méthode créewriter () code>) sans avoir à passer à travers un formulaire de texte en obtenant un xmlwriter code> instance pour les nourrir avec des données.

En supposant que votre XML L'entrée est ixpathnavigable code> et que vous avez chargé une instance xslcompiledTransform code>, vous pouvez effectuer les éléments suivants: p>

XmlDocument target = new XmlDocument(input.CreateNavigator().NameTable);
using (XmlWriter writer = target.CreateNavigator().AppendChild()) {
  transform.Transform(input, writer);
}


0 commentaires