Frage

Dies ist eine Followup Frage von Wie Zeichen von Oracle kodieren xML?

In meiner Umgebung hier verwende ich Java um das Ergebnis zu xml gesetzt serialisiert. Ich habe keinen Zugriff auf den Ausgangsstrom selbst, nur auf eine org.xml.sax.ContentHandler.

Wenn ich versuche, die Ausgabe Zeichen in einem CDATA Abschnitt:

Es kommt im Grunde wie folgt:

xmlHandler.startElement(uri, lname, "column", attributes);
String chars = "<![CDATA["+rs.getString(i)+"]]>";
xmlHandler.characters(chars.toCharArray(), 0, chars.length());
xmlHandler.endElement(uri, lname, "column");

Ich bekomme diese:

<column>&lt;![CDATA[33665]]&gt;</column>

Aber ich will diese:

<column><![CDATA[33665]]></column>

Wie kann ich Ausgang einen CDATA-Abschnitt mit einem Sax Content?

War es hilfreich?

Lösung

Es ist entkam immer, weil die handler.characters Funktion ausgelegt ist, zu entkommen und der <![CDATA[ Teil ist nicht Teil des Wertes berücksichtigt.

Sie müssen die neu freigelegten Methoden in DefaultHandler2 verwenden oder den TransformerHandler Ansatz verwenden, in dem Sie die Ausgabeschlüssel CDATA_SECTION_ELEMENTS gesetzt, die eine Leerzeichen getrennte Liste von Tag-Namen nimmt die Abschnitte Ausgabeunter Textes in CDATA eingeschlossen sollten.

StreamResult streamResult = new StreamResult(out);
SAXTransformerFactory tf = (SAXTransformerFactory) SAXTransformerFactory.newInstance();
TransformerHandler hd = tf.newTransformerHandler();
Transformer serializer = hd.getTransformer();
serializer.setOutputProperty(OutputKeys.CDATA_SECTION_ELEMENTS, "column");
hd.setResult(streamResult);
hd.startDocument();
hd.startElement("","","column",atts);
hd.characters(asdf,0, asdf.length());
hd.endElement("","","column");
hd.endDocument();

Andere Tipps

Sie sollten startCDATA() und endCData() als Trennzeichen verwenden, d.

xmlHandler.startElement(uri, lname, "column", attributes);
xmlHandler.startCDATA();
String chars = rs.getString(i);
xmlHandler.characters(chars.toCharArray(), 0, chars.length());
xmlHandler.endCDATA();
xmlHandler.endElement(uri, lname, "column");
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top