Comment faire pour transformer un fichier XML en tant que chaîne w/o à l'aide de fichiers .NET?
Disons que j'ai deux chaînes:
- on est des données XML
- et l'autre est XSL données.
Le xml et xsl données sont stockées dans des colonnes de base de données, si vous devez savoir.
Comment puis-je transformer le XML en C# w/o enregistrer le xml et xsl que les fichiers en premier? Je voudrais la sortie à une chaîne, trop (HTML à partir de la transformation).
Il semble C# préfère transformer via des fichiers. Je ne pouvais pas trouver une chaîne de caractères-la surcharge de l'entrée de Charge() dans XslCompiledTransform. Donc, c'est pourquoi je vous demande.
Vous devez vous connecter pour publier un commentaire.
Voici ce que je suis allé avec. C'est une combinaison de vos réponses. J'ai voté les réponses qui a inspiré ceci:
Note: cette instruction est nécessaire dans le xsl, dans l'ordre de sortie au format HTML:
myString = @"<root xmlns=""http:foo.namespace"" />
Il m'a fallu beaucoup de temps (littéralement ans) à travailler sur la façon concise code à l'aide de
Stream
et/ouTextWriter
peut être le cas si vous utilisez les bonnes expressions idiomatiques.En supposant
transform
etinput
sont des chaînes de caractères:sw
dans un bloc using? En fait, les deux de laStringReader
instances doit être ainsi. Ils ne seront pas automatiquement éliminés lors de laXmlReader
instances sont.using
blocs pour laXmlReaders
sont inutiles. Le seul objet qu'il est vraiment essentiel pourClose
dans ce scénario est leXmlWriter
, de sorte que toute l'attente de l'écrit à l'StringWriter
se rincé avant d'obtenir les résultats. Mettre leStringWriter
à l'intérieur leusing
bloc ferait-il possible que leXmlWriter
ne pas être vidé et fermé avant que vous avez obtenu la valeur de la chaîne.Vous pouvez XmlReader.Créer() à partir d'un StringReader ou un MemoryStream . XslCompileTransfrom peut Load() à partir d'un XmlReader.
edit: à l'aide de blocs ajoutés
- Je envoyer le contenu du fichier xml, puis chargez le document XSLT, appliquer la transformation et ensuite de retour à la nouvelle xml.
REMARQUE: "XSLTFile.xslt" Il est ajouté à la solution et définir la propriété "Copier dans le Répertoire de Sortie" pour "Copy".
Un VB.Net version inspirée par Robert Rossney réponse:
Je voudrais utiliser le
XmlReader.Create(DatabaseBlobStream)
etXmlWriter.Create(StringBuilder)
les surcharges. À l'aide de la suite de DatabaseBlobStream objetDatabaseBlobStream.cs