Nochmal zwecks XML und Zeilenumbrücke
TOM
- perl
Guten Morgen Leute!
Bei mir ist jetzt es alles klar.
XML speichert meine Zeilenumbrüche als Zeilenumbrüche
ab, dass ist voll in Ordnung.
Bei der Ausgabe werden dann Zeilenumbrüche zu Leerzeichen, dass ist nicht so gut. Mein Problem
ist dass wenn ein Benutzer etwas formatiert in
ein textarea(CGI.PM) eingibt, und ich diesen
Inhalt als ein Attribut eines XML-Elements abspeichere, es bei der Ausgabe unformartiert erscheint.
Benutzer gibt z.B. ein:
1. Das ist die erste Zeile
2. Das ist die zweite Zeile
Erscheint so in meinem xml-File:
<QUESTION value="1. Das ist die erste Zeile
2. Das ist die zweite Zeile"/>
Gebe ich diesen Wert später an ein HTML-textarea zurück
erscheint (zwecks XML-Specification) folgendes:
1. Das ist die erste Zeile 2. Das ist die zweite Zeile
Das ist Müll!
Ich möchte jetzt nicht trickens und irgend einen Unsinn
in mein xml-File schreiben, da diese später einmal
per Browser betrachtet werden sollten.
Also bleibt mir anscheiend nicht anders übrig als
bei der Ausgabe per Substitution (oder ähnlichen) wieder
Zeilenumbrüche zu erzeugen, oder?
Wisst ihr was sinnvolles und vielleicht sogar elegantes.
Viele Grüße
tom
Hi,
<QUESTION value="1. Das ist die erste Zeile
2. Das ist die zweite Zeile"/>
[...]
- Das ist die erste Zeile 2. Das ist die zweite Zeile
Das ist Müll!
was hälst Du von
<QUESTION>1. Das ist die erste Zeile
2. Das ist die zweite Zeile</QUESTION>
Da müßten die Umbrüche doch theoretisch bestehen bleiben... Oder Du kodierst sie wirklich in "<br />" o.ä. um.
Cheatah
Hi,
<QUESTION>1. Das ist die erste Zeile
2. Das ist die zweite Zeile</QUESTION>
Ich denk das bleibt sich gleich. Beim Abspeichern
hab ich keine Probleme.
Nur halt beim Auslesen, und wenn dann XML Zeilenumbrüche
als Leerzeichen interpretiert hab ich meine Probleme.
Gruß
tom
Hi,
<QUESTION>1. Das ist die erste Zeile
2. Das ist die zweite Zeile</QUESTION>Ich denk das bleibt sich gleich.
Nein. Die Umsetzung von Linefeeds in Spaces erfolgt nur innerhalb von Attributwerten (CDATA) (siehe Kapitel 3.3.3 der Spec). In normalem Text (#PCDATA) dagegen bleiben sie (fast) unveraendert (Kapitel 2.10 und 2.11 der Spec). Dies waere also eine Moeglichkeit fuer Dich.
Allerdings verwendet man nicht ohne Grund an manchen Stellen Attributwerte in Empty Elements und an anderen Stellen eben Elements mit Mixed Content (obiger Vorschlag). In Deinem Fall scheint mir zwar letzteres ohnehin angebrachter zu sein, aber das musst Du schon selber wissen, kenne ja nicht den Rest Deiner DTD.
Wenn man also solche besonderen Zeichen in Attributwerten verwenden will, muss man sie auf irgendein Weise maskieren. Dies kann z.B. so geschehen:
s/([\x00-\x1F])/'$'.ord($1).';'/ge;
Beim Auslesen dann zurueckverwandeln:
s/$(\d+);/chr($1)/ge;
(untestet!). Soll nichts anderes heissen als alle Character mit ASCII-Code < 32 durch die Zeichenkette "$10;" zu ersetzen, wobei die 10 fuer den ASCII-Code dieses Zeichens steht.
HTH, Calocybe