2009-03-05 14 views
0

Meine Anwendung erzeugt eine XML-Datei, die dann xslt in einen netten HTML-Bericht umgewandelt wird. Ich habe jedoch ein Problem mit \ n. Es gibt einige xslt Techniken, um es zu tun, aber sie sind ziemlich umständlich und zeitaufwendig.So ersetzen Sie XML-Sonderzeichen manuell?

So war meine Lösung eines string.replace \ n

< br />

zu tun und dann die xmlWriter zu zwingen, dies zu schreiben mit writeRaw (Text). Das Problem ist, dass der Text manchmal einige ungültige Zeichen wie> hat.

Ich kann keine Hilfsmethode in .net finden, die nur eine Zeichenfolge einnimmt und sie in eine XML-freundliche Zeichenfolge umwandelt. Ich schaute mit dem Reflektor und die Klasse, die diese Logik behandelt, ist nicht öffentlich.

Irgendwelche Ideen (neben dem Schreiben meines eigenen Codes, dies zu tun)?

+0

Bitte senden Sie Ihren aktuellen Code an The Daily WTF (http://thedailywtf.com/Contact.aspx). Sie würden die Titelseite leicht erhalten. – Welbog

+0

Alter, zu hart. Zumindest, selbst wenn sein Code der schlimmste Haufen von Dämpfen ist, versucht er, besser zu lernen. Das verdient Respekt zumindest. –

+0

Wen interessiert das? Bei TDWTF geht es nicht um Lernen, es geht darum, uns bei Leuten zu lachen, die versuchen, XML als String zu analysieren und zu versagen. Seine aktuelle Lösung hat WTF überall geschrieben. Er hat seine Antwort von Tomalak bekommen. Lasst uns jetzt über seinen alten, kaputten Code lachen. – Welbog

Antwort

3

ich glaube, die Lösung auf diese Frage wird Ihnen helfen:

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

Sie können die bereitgestellte Vorlage in Ihren Transformationsprozess integrieren, und Sie sind fertig, ohne die Hände schmutzig zu machen.

+0

Danke, das hat funktioniert. Ich war mir Ihrer Post bewusst, aber ich war auf der Suche nach einer schnelleren Lösung. Ich wähle jetzt nicht früh zu optimieren :). –

+0

Hm. Das ist eine gute Entscheidung, denke ich. ;-) Wenn Ihnen danach ist, können Sie hier Leistungsmessungen posten. Meine Vermutung ist, dass es eigentlich nicht katastrophal langsam ist. Und es stellt eine gültige Ausgabe sicher. – Tomalak

4

Verwenden Sie niemals String-Manipulation, um XML zu erzeugen. Es bringt nicht nur schlecht sozialisierte Leute zum Lachen: Es führt zu Code, der Bugs enthält, von denen du nicht weißt, dass sie existieren.

Denken Sie aus einer testgetriebenen Perspektive darüber nach. Sie haben eine Methode geschrieben, die die Zeichenfolgenmanipulation zum Generieren von XML verwendet. Okay, jetzt schreibe einen Testfall dafür, der zeigt, dass es niemals schlecht formatierte XML ausgibt. Damit der Test dies beweist, müssen Sie jedes mögliche Szenario testen, das in der XML-Empfehlung beschrieben wird. Kennen Sie die XML-Empfehlung gut genug, um bestätigen zu können, dass Ihr Test dies tut?

Nein, Sie nicht. Und das wollen Sie nicht wirklich, es sei denn, Sie schreiben ein Framework für die XML-Generierung. Aus diesem Grund verwenden Sie die Klassen in System.Xml, um XML zu generieren. Die Leute, die sie geschrieben haben, haben diese Arbeit gemacht, damit Sie es nicht tun müssen.

Tomalak zeigte, wie man mit XSLT das macht, was man versucht. Wenn Sie eine XmlWriter verwenden den XML zu generieren, verwenden Sie dieses Muster:

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", "", ""); 
    } 
} 

String-Manipulation Dies verwendet, wo es angebracht ist - wenn String-Daten außerhalb des XML-Manipulation - und nicht, wo es nicht - bei der Herstellung von XML Text.

+0

Sie machen einen guten Punkt, Robert. –

Verwandte Themen