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: p> alternativement, au lieu de prendre et de retourner des chaînes, il pourrait être de prendre et de retourner xmlnodes. p> est une telle fonction? p> p>
3 Réponses :
Avez-vous remarqué qu'il y ait le XslcompiledTransform code> classe
? P>
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/...
Vous pouvez utiliser le stringreader code> et
stritter code> classes:
Comme il est évidemment est i> un xmldocument code> déjà (il utilise
... .document.innerxml code>), en utilisant
stringreader code> 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.
Un peu de connaissances est que vous pouvez en réalité transformer des données directement en un En supposant que votre XML L'entrée est 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.
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);
}