MSXML à partir de C++ - pretty print / tiret, les documents nouvellement créés
Je suis de l'écriture de fichiers XML à l'aide de l'analyseur MSXML, avec un wrapper j'ai téléchargé à partir d'ici: http://www.codeproject.com/KB/XML/JW_CXml.aspx. Fonctionne très bien, sauf que quand je crée un nouveau document à partir du code (donc pas de chargement à partir d'un fichier et de le modifier), le résultat est tout dans une seule grande ligne. J'aimerais éléments pour être mis en retrait bien pour que je puisse lire facilement dans un éditeur de texte.
Googler montre beaucoup de gens avec la même question posée autour de 2001. Réponses l'habitude de dire 'appliquer une transformation XSL' ou 'ajouter vos propres espaces nœuds. Surtout le dernier me fait passer %( donc j'espère qu'en 2008 il y a un moyen plus facile de faire de jolies MSXML sortie. Donc ma question; est-il, et comment puis-je l'utiliser?
OriginalL'auteur Roel | 2008-10-02
Vous devez vous connecter pour publier un commentaire.
Essayer ça, j'ai trouvé il y a des années sur le web.
Je souhaite vraiment que je pourrais trouver la source originale de moi-même. Cela a sauvé mes fesses 🙂
J'en ai trouvé un similaire sur discuss.com.cn/xml/86274.html, c'est là que j'ai eu la".GetInterfacePtr()' de la partie. Je ne parle pas Chinois mais je ne comprends pas la plupart de la page 🙂
Qu'est-ce que le flux? J'espère que ce n'est pas un flux XML, parce que ce serait affreux.
OriginalL'auteur Torlack
Voici une version modifiée de la accepté de répondre à transformer en mémoire (des modifications que dans le dernier quelques lignes, mais je poste tout le bloc pour la commodité des futurs lecteurs):
Gestion des versions de MSXML toujours des voyages m'a trop, je n'ai aucune idée de comment c'est censé fonctionner.
Pour moi, ce n'est pas le même ".GetInterfacePtr ()". J'ai trouvé un TRÈS semblables extrait de code sans que voici: social.msdn.microsoft.com/forums/vstudio/en-US/...
Cela ne semble pas fonctionner pendant 60 (MXXMLWriter60, SAXXMLReader60, DOMDocument60). Des idées pourquoi? Il vient juste de créer un document vierge quand je l'enregistre en.
Cette solution juste à la sortie d'un fichier vide. J'ai trouvé une solution here.
OriginalL'auteur Roel
Même mes 2 cents arriver 7 ans plus tard, je pense que la question mérite tout de même une réponse simple enveloppé dans seulement quelques lignes de code, ce qui est possible à l'aide de Visual C++
#import
la directive et le C++ natif COM bibliothèque de prise en charge (en offrant des pointeurs intelligents et de l'encapsulation d'erreur de manipulation).Noter que, comme la accepté de répondre qu'il n'essaie pas de s'insérer dans le
CXml
classe de l'OP est à l'aide, mais plutôt montre l'idée de base. Aussi je supposemsxml6
.D'impression à n'importe quel flux
Flux de fichier
Si vous avez besoin d'un flux en écriture à un fichier vous avez besoin d'une mise en œuvre de la
IStream
interface.wtlext a une classe, que vous pouvez utiliser ou à partir de laquelle vous pouvez déduire de la façon dont vous pouvez écrire votre propre.
Une solution simple qui a bien fonctionné pour moi, c'est en utilisant le Flux de données Ado classe:
À les coller ensemble
Simpliste
main
fonction montre en action:OriginalL'auteur klaus triendl
À moins que la bibliothèque dispose d'une option de format alors le seul autre moyen est d'utiliser XSLT, ou externe, assez imprimante ( je pense que htmltidy pouvez aussi le faire en xml)
Il y doen semble pas être une option dans le codeproject lib, mais vous pouvez spécifier une feuille de style XSLT pour MSXML.
OriginalL'auteur Martin Beckett
J'ai écrit un script sed tout à l'heure pour base xml de mise en retrait. Vous pouvez l'utiliser comme un externe pénétrateur si tout le reste échoue (enregistrer ce pour xmlindent.sed, et le processus de votre xml avec sed -f xmlindent.sed <nom de fichier>). Vous pourriez avoir besoin de cygwin ou certains autres posix environnement de l'utiliser.
Voici la source:
Hrmp, les onglets semblent être déformé... Vous pouvez copier-déchets provenant de la ici: XML de mise en retrait avec sed(1)
OriginalL'auteur mitchnull