Wie zu bewahren Zeilenumbrüche in CDATA-beim erzeugen von XML?
Möchte ich einige schreiben von text mit whitespace-Zeichen wie newline
und tab
in eine xml-Datei, damit ich
Element element = xmldoc.createElement("TestElement");
element.appendChild(xmldoc.createCDATASection(somestring));
aber wenn ich lese das schon mit
Node vs = xmldoc.getElementsByTagName("TestElement").item(0);
String x = vs.getFirstChild().getNodeValue();
Ich bekomme einen string, der keine Zeilenumbrüche mehr.
Wenn ich mir direkt in der xml auf der Festplatte, die Zeilenumbrüche scheinen erhalten. also das problem tritt auf, wenn das Lesen in der xml-Datei.
Wie kann ich das beibehalten der Zeilenumbrüche?
Dank!
Könnte Sie post ein mehr komplettes code-Beispiel?
es ist ein Element. ich poste mehr code bald.
wenn du den Wert von 'x' ist gleichbedeutend mit 'classextender" minus-die Zeilenumbrüche?
ja genau!
Was newline-Zeichen verwendet wird? Ein Schuss im Dunkeln, aber ich Frage mich, ob es hat etwas damit zu tun, wie Zeilenumbrüche werden unterstützt: w3.org/TR/REC-xml/#sec-line-ends
es ist ein Element. ich poste mehr code bald.
wenn du den Wert von 'x' ist gleichbedeutend mit 'classextender" minus-die Zeilenumbrüche?
ja genau!
Was newline-Zeichen verwendet wird? Ein Schuss im Dunkeln, aber ich Frage mich, ob es hat etwas damit zu tun, wie Zeilenumbrüche werden unterstützt: w3.org/TR/REC-xml/#sec-line-ends
InformationsquelleAutor clamp | 2009-08-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich weiß nicht, wie du analysieren und schreiben Ihr Dokument, aber hier ist eine verbesserte code-Beispiel, basierend auf Ihre:
Die Serialisierung mit LSSerializer ist der W3C-Weg, es zu tun (siehe hier). Die Ausgabe ist wie erwartet, mit line-Trennzeichen:
Die Ausgabe, die ich gezeigt haben, ist eine echte Ausgabe von meinem eigenen Rechner der code-Beispiel, das ich gepostet. Haben Sie versucht, das schreiben, den text mit dem code, den ich vermutete? Oder nur zu Lesen, es mit meinem code? Auch, was ist die Kodierung der Datei (Sie können sehen, dass in meinem Beispiel die Kodierung ist UTF-16). Ich hatte ein ähnliches problem, nicht mit der gleichen Codierung, und ich habe es behoben durch die Verwendung von Charset.forName() mit der tatsächlichen Codierung verwendet.
yep, ich habe versucht deinen code in meinem Fall. ich verwendet genau den gleichen code zur Ausgabe der Zeichenfolge. aber es enthält keine Leerzeichen. die Codierung die ich benutze, ist encoding="ISO-8859-1" ich werde versuchen, verwenden Sie eine UTF-16
Wenn Sie genau den gleichen code mit ISO-8859-1, werden Sie Probleme haben - es sei denn, Sie ändern den Zeichensatz.Vorname ISO-8859-1. Neue-Linien problematisch sein kann zwischen ASCII und UTF-16, also seine lohnt sich ein Schuss.
Ich habe versucht mit "utf-16" beim de-serialisieren, aber in meinem Fall .. es ist die Umwandlung von "\r\n" mit "\n\n" die Ursache Problem für mich. Kannst du bitte eine Lösung für dieses problem.
InformationsquelleAutor Aviad Ben Dov
Müssen Sie überprüfen Sie den Typ der einzelnen Knoten mit Knoten.getNodeType(). Wenn der Typ CDATA_SECTION_NODE, müssen Sie concat CDATA Wachen zu Knoten.getNodeValue.
InformationsquelleAutor fpmurphy
Du musst nicht unbedingt die Verwendung von CDATA-zu bewahren white-space-Zeichen.
Die XML - Spezifikation angeben, wie zum Kodieren diese Zeichen.
So zum Beispiel, wenn Sie ein element mit Wert, enthält der neue Raum sollte man Sie verschlüsseln, mit
Carriage return:
Usw.
InformationsquelleAutor LiorH
BEARBEITEN: schneiden Sie alle irrelevanten Sachen
Ich bin neugierig zu wissen, was-DOM-Implementierung, die Sie verwenden, weil es nicht Spiegel das default-Verhalten der in ein paar JVMs, die ich versucht habe (Sie liefern mit Xerces impl). Ich bin auch interessiert, was newline-Zeichen im Dokument.
Ich bin mir nicht sicher, ob CDATA sollten die Leerzeichen beizubehalten, ist eine Selbstverständlichkeit. Ich vermute, dass es gibt viele Faktoren beteiligt. Nicht DTDs/Schemata beeinflussen, wie whitespace-Zeichen verarbeitet?
Könnten Sie versuchen, mit Hilfe der xml:space="preserve" Attribut.
Uh! Verpasst!
danke, wo genau soll ich hinzufügen, dass xml:space="preserve" Attribut? zu den Knoten, enthält der text oder zur xml-root?
InformationsquelleAutor McDowell
xml:space= "preserve" gibt es nicht. Das ist nur für "alle whitespace-nodes". Das ist, wenn man die whitespace-Knoten in
Aber sehen, dass die whitespace-Knoten werden NUR Leerzeichen.
Ich kämpfen um Xerces zum generieren von Ereignissen ermöglicht die isolation von CDATA-Inhalte als auch. Ich habe keine Lösung bisher.
InformationsquelleAutor Mike Beckerle