+ Antworten
Ergebnis 1 bis 6 von 6

Thema: XMLStreamWriter verarbeitet keine line separator

  1. #1
    User Viertel Megabyte Themenstarter
    Avatar von TMII
    Registriert seit
    19.02.2015
    Fachbeiträge
    317
    Genannt
    33 Post(s)
    Hi,

    wie der Titel schon sagt scheint der XMLStreamWriter keine line separator zu verarbeiten.
    Ganz großes Problem, sitze bereits seit einigen Tagen daran eine klitzekleine XML-Datei zu schreiben.
    Das Problem ist aber eben das der Wert von einigen Attributen newline character enthält, die dann aber nicht in XML geparsed werden sondern einfach direkt in die Datei geschrieben werden.

    Weiß jemand wie ich dieses Problem umgehen kann?
    Java Code:
    1.  
    2. <inhalt wert="Zeile1
    3. Zeile2"</inhalt>
    statt
    Java Code:
    1.  
    2. <inhalt wert="Zeile1
    3. Zeile2"</inhalt>

    Ich habe versucht das Problem zu umgehen indem ich direkt "
    " in den Stream geschrieben habe, aber dann kodiert er das "&" in "&amp;" und es kommt das hier heraus
    Java Code:
    1.  
    2. <inhalt wert="Zeile1&amp;#13;&amp;#10;Zeile2"</inhalt>

    Die Sache ist die, XML Dateien sind ja wirklich nicht schwer zu schreiben (lesen ist viel eher das Problem und das funktioniert tadellos), wenn ich nur irgendwie einen Parser hätte der mir eben so Spezialcharacter wie "\n" und """ und "&" in XML character formatiert (&#xy) dann würde ich das einfach mal schnell selber hinpfeffern, aber über diesen XML Schwachsinn findet man leider nicht soviel wie ich es gerne hätte und dann bleibe ich bei so einer banalen Aufgabe für mehrere Tage hängen.

    Achja selbstverständlich habe ich auch versucht den unterliegenden Stream auszutauschen indem ich den FileWriter überschreibe, dann kann ich eben genau dieses Konstrukt "&amp;#13;&amp;#10;" abfangen und richtig hinschreiben (schmutzig aber geht), das Problem dann ist aber wieder das ich auf eine Codierung (utf-8 / iso-wasweißich-1) verzichten muss und dann kommt wieder Mist bei raus weil die XML datei unter anderem chinesisch und russisch enthält und weitere tolle special-character-sprachen und dann sieht die datei nurnoch so aus "??????????????????????????????????????????????????????".

    Bitte sagt mir ich habe irgendwas übersehen!?

    Das einzige was ich mir noch denken könnte wäre setProperty(), jedoch gibt es keine Dokumentation was man dort einstellen kann.
    Ich habe den Code zurückverfolgt (war nicht leicht) und herausgefunden dass drunterliegende Klasse von der FactoryMethode aber nur factory.setProperty(XMLOutputFactory.IS_REPAIRING_NAMESPACES, true); verwendet...
    bin am verzweifeln.

    Jede Hilfe ist willkommen
    Beste Grüße
    TMII

  2. #2
    Unregistered
    Gast/Guest
    Schonmal über CDATA nachgedacht?

  3. #3
    Global Moderator Viertel Gigabyte Avatar von SlaterB
    Registriert seit
    06.08.2008
    Fachbeiträge
    2.710
    Genannt
    286 Post(s)
    Zitat Zitat von TMII Beitrag anzeigen
    XML Dateien sind ja wirklich nicht schwer zu schreiben (lesen ist viel eher das Problem und das funktioniert tadellos), wenn ich nur irgendwie einen Parser hätte der mir eben so Spezialcharacter wie "\n" und """ und "&" in XML character formatiert (&#xy) dann würde ich das einfach mal schnell selber hinpfeffern
    ist speziell diese Spezialcharacter-Umwandlung so schwer?
    ich selber habe eine kleine Methode, Zeilenumbruch nicht dabei, aber das willst du ja vielleicht auch gar nicht ersetzen (nicht wirklich verstanden nach langen Posting), sonst noch zu ergänzen

    Java Code:
    1.         StringBuilder b = _builder;
    2.         for (char c : text.toCharArray())
    3.         {
    4.             case '<':
    5.                     b.append("&l t;"); // edit: Leerzeichen darin damit das Forum sie nicht umwandelt,
    6.                            // nochmal edit: wobei Fehler nicht zu reproduzieren..
    7.                     break;
    8.                 case '>':
    9.                     b.append("&g t;");
    10.                     break;
    11.                 case '&':
    12.                     b.append("&am p;");
    13.                     break;
    14.                 case '"':
    15.                     b.append("&qu ot;");
    16.                     break;
    17.                 case '\'':
    18.                     b.append("&ap os;");
    19.                     break;
    20.                 default:
    21.                     b.append(c);
    22.                     break;
    23.             }
    24.         }

    für weitere Sonderzeichen Fehlermeldung abwarten oder mal alle Zeichen einzeln duch richtiges XML schicken oder Listen,
    nach List of XML and HTML character entity references - Wikipedia, the free encyclopedia nur meine 5

    ------

    Zitat Zitat von TMII Beitrag anzeigen
    indem ich den FileWriter überschreibe, dann kann ich eben genau dieses Konstrukt "
    " abfangen und richtig hinschreiben (schmutzig aber geht), das Problem dann ist aber wieder das ich auf eine Codierung (utf-8 / iso-wasweißich-1) verzichten muss
    überschreiben mag schmutzig sein, aber wieso Codierungsproblem, wenn du sonst FileWriter verwendest, dann doch auch schon Codierungsfrage?
    oder verwendest du sonst createXMLStreamWriter(OutputStream stream)? kannst ja mal im Quellcode suchen wie da weiter Encoding festgelegt wird,

    sonst für sich daran arbeiten, ein FileWriter ohne weitere Angaben verwendet Default-Encoding, auf Windows nicht unbedingt begrüßenswert,
    auf UTF-8 zu wechseln ist aber nicht so schwer, siehe etwa hier, Code mal nicht in der Antwort mit grünem Häkchen sondern darunter (mehrere)
    How to write a UTF-8 file with Java? - Stack Overflow
    Geändert von SlaterB (20.02.2015 um 09:40 Uhr)
    Hansa wird Meister

  4. Es bedanken sich:
    TMII (20.02.2015)
  5. #4
    Frequent User Floppy Disc Avatar von Bleiglanz
    Registriert seit
    31.07.2013
    Fachbeiträge
    761
    Genannt
    99 Post(s)
    Zitat Zitat von TMII Beitrag anzeigen
    aber über diesen XML Schwachsinn findet man leider nicht soviel wie ich es gerne hätte
    Warum sollte das Schwachsinn sein? Tatsächlich - etwas überraschend - ist die Behandlung von Whitespace DAS THEMA in XML schlechthin, war es schon bei der Spezifikation vom XML.

    White Space in XML Documents

    What You Need to Know About Whitespace in XML

    XML Whitespace

    https://msdn.microsoft.com/en-us/lib...v=vs.110).aspx

    Understanding xml:space

    usw. usf.

    http://www.w3.org/TR/REC-xml/#sec-white-space

    Zu deiner Frage:

    Du willst etwas, das die XML Spec gar nicht erlaubt - wird also schwierig für dich.

    http://stackoverflow.com/questions/2...hitespace?rq=1
    Yeah, well, you know, that's just, like, your opinion, man.

  6. #5
    Frequent User Halbes Megabyte
    Registriert seit
    31.07.2013
    Ort
    Hamburg
    Fachbeiträge
    557
    Genannt
    56 Post(s)
    Blog-Einträge
    2
    Mach mal ein System.out.println mit der Instanz des XMLStreamWriter. Damit kriegst Du die tatsächliche Klasse raus, die das Ding hat. Mit dem Klassennamen kannst Du dann suchen, welche Properties unterstützt werden. Ggf. diesen hier mal posten.

  7. Es bedanken sich:
    TMII (20.02.2015)
  8. #6
    User Viertel Megabyte Themenstarter
    Avatar von TMII
    Registriert seit
    19.02.2015
    Fachbeiträge
    317
    Genannt
    33 Post(s)
    Zitat Zitat von Unregistered Beitrag anzeigen
    Schonmal über CDATA nachgedacht?
    Nachgedacht ja, da die XML aber zum Datenprotokollaustausch dient mit einem anderen Server weiß ich nicht was auf der anderen Seite mit dem CDATA passiert. Ist CDATA XML standard? Also wenn CDATA verwendet wird dann definitiv HTML?

    Zitat Zitat von SlaterB Beitrag anzeigen
    [...]
    Danke, wie gesagt enthält die XML viele unterschiedliche Sprache. Dein Beispiel deckt damit leider nur diese paar Zeichen ab, aber alle russischen Buchstaben werden dann nicht interpretiert.
    Das Problem ist wenn ich die Codierung außerhalb verändere hat das keinen Einfluss auf den XMLStreamWriter, das erste was passiert ist das er eine Exception wirft mit "Codierung stimmt nicht mit in XML angegebener Codierung überein", und die Codierung kann man leider nur mit einem FileOutputStream zusammen festlegen, nicht mit dem FileWriter Konstruktor.

    Aber du hast schon recht, vielleicht sollte ich das Ergebnis des Outputstreams mal versuchen irgendwo anderst hineinzustreamen um dann im post-processing Styl den den Newline zu überschreiben, würde aber bedeuten die ganze Codierung würde wieder verloren gehen. Ach ach ist das kompliziert ^^

    Zitat Zitat von Bleiglanz Beitrag anzeigen
    [...]
    Okay danke, dass das ganze nicht erlaubt ist hatte ich in der Spezifikation nicht gesehen.
    Schon witzig denn die SteamAPI möchte genau das...
    Und mit Schwachsinn meine ich nicht XML selbst (wobei aufgebläht ist es schon), sondern eben diesen whitespace Mist. Wie ich höre gibt es bei anderen APIs eine whitespace flag.

    Zitat Zitat von nillehammer Beitrag anzeigen
    Mach mal ein System.out.println mit der Instanz des XMLStreamWriter. Damit kriegst Du die tatsächliche Klasse raus, die das Ding hat. Mit dem Klassennamen kannst Du dann suchen, welche Properties unterstützt werden. Ggf. diesen hier mal posten.
    Schon gemacht und schon gefunden
    GC: XMLStreamWriterImpl - com.sun.xml.internal.stream.writers.XMLStreamWriterImpl (.java) - GrepCode Class Source
    Die einzige Property die er verwendet ist
    "isRepairingNamespace"

    wobei mir beim überfliegen aufgefallen ist, das er anscheinend UTF-8 standardmäßig verwendet, das kann ich in der Praxis nicht bestätigen, all den Fragezeichen zu urteilen aber muss mir das nochmal anschauen.

+ Antworten Thema als "gelöst" markieren

Direkt antworten Direkt antworten

Schreibe folgende Zahl als Zahlwort! 85

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Ähnliche Themen

  1. Command Line + GUI
    Von Helveticus im Forum Allgemeine Themen
    Antworten: 6
    Letzter Beitrag: 24.09.2014, 07:32
  2. Antworten: 16
    Letzter Beitrag: 22.08.2014, 13:42
  3. (Swing) Line in Combobox sichtbar
    Von NiXPhoE im Forum AWT, Swing, JavaFX & SWT
    Antworten: 4
    Letzter Beitrag: 05.06.2014, 17:34
  4. Antworten: 4
    Letzter Beitrag: 23.11.2010, 01:34

Berechtigungen

  • Neue Themen erstellen: Ja
  • Themen beantworten: Ja
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •