2009-03-05 7 views
0

Mon application produit un fichier xml qui est ensuite transformé par xslt en un bon rapport html. J'ai cependant un problème avec \ n Il y a quelques techniques de xslt pour le faire, mais elles sont assez maladroites et prennent du temps.Comment remplacer les caractères spéciaux xml manuellement?

Donc ma solution était de faire un String.replace \ n à

< br />

puis pour forcer le xmlwriter à écrire cela avec WriteRaw (texte). Le problème est que le texte a parfois des caractères illégaux comme>.

Je n'arrive pas à trouver une méthode d'utilitaire dans .net qui accepte simplement une chaîne et la transforme dans une chaîne compatible xml. J'ai regardé avec le réflecteur et la classe qui gère cette logique n'est pas publique.

Y a-t-il des idées (à part écrire mon propre code pour le faire)?

+0

Veuillez soumettre votre code actuel à The Daily WTF (http://thedailywtf.com/Contact.aspx). Vous obtiendrez facilement la première page. – Welbog

+0

Mec, trop dur. À tout le moins, même si son code est la pire pile de vapeur, il essaie d'apprendre mieux. Cela mérite le respect à tout le moins. –

+0

Qui s'en soucie? TDWTF ne consiste pas à apprendre, il s'agit de se moquer de nos ânes à des gens qui essaient d'analyser XML comme une chaîne de caractères et qui échouent. Sa solution actuelle a WTF écrit partout. Il a sa réponse de Tomalak. Maintenant, amusons-nous bien sur son vieux code brisé. – Welbog

Répondre

3

Je pense que la solution à cette question vous aidera à:

xslt replace \n with <br/> only in one node?

Vous pouvez incorporer le modèle fourni dans votre processus de transformation, et vous avez terminé sans se salir les mains.

+0

Merci, cela a fonctionné. J'étais au courant de votre message mais je cherchais une solution plus rapide. Je choisis maintenant de ne pas optimiser tôt :). –

+0

Hm. C'est une bonne décision, je suppose. ;-) Si vous en avez envie, vous pouvez poster quelques mesures de performance ici. Je suppose que ce n'est pas vraiment catastrophique. Et cela garantit une sortie valide. – Tomalak

4

N'utilisez jamais de manipulation de chaînes pour produire du XML. Ce n'est pas seulement que les gens mal-socialisés se moquent de vous: cela mène au code qui contient des bogues que vous ne connaissez pas. Pensez-y à partir d'une perspective pilotée par les tests. Vous avez écrit une méthode qui utilise la manipulation de chaînes pour générer du code XML. Ok, écrivez maintenant un cas de test pour cela qui démontre qu'il jamais émettre du XML mal formé. Pour que le test prouve cela, vous devez tester tous les scénarios possibles décrits dans la recommandation XML. Connaissez-vous suffisamment la recommandation XML pour pouvoir affirmer que votre test le fait?

Non, vous ne le faites pas. Et vous ne le voulez vraiment pas, sauf si vous écrivez un framework pour la génération XML. C'est pourquoi vous utilisez les classes dans System.Xml pour générer du XML. Les gens qui les ont écrits ont fait ce travail pour que vous n'ayez pas à le faire. Tomalak a montré comment faire ce que vous essayez de faire avec XSLT. Si vous utilisez un XmlWriter pour générer le XML, utilisez ce modèle:

string s = "replace\nnewlines\nwith\nbreaks"; 
string[] lines = s.Split('\n'); 
for (int i=0; i<lines.Length; i++) 
{ 
    xw.WriteString(lines[i]); 
    if (i<lines.Length - 1) 
    { 
     xw.WriteElementString("br", "", ""); 
    } 
} 

Il utilise la manipulation de chaînes où il est approprié - lors de la manipulation des données de chaîne en dehors de XML - et ne pas où ce n'est pas - lors de la production XML texte.

+0

Vous faites un bon point, Robert. –

Questions connexes