read parser parse manage leer java xml sax

java - parser - Cómo generar una sección CDATA desde un Sax XmlHandler



xml parser java (2)

Debe usar startCDATA() y endCData() como delimitadores, es decir,

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

Esta es una pregunta de seguimiento sobre ¿Cómo codificar caracteres de Oracle a Xml?

En mi entorno aquí utilizo Java para serializar el conjunto de resultados a xml. No tengo acceso a la secuencia de salida en sí, solo a un org.xml.sax.ContentHandler.

Cuando trato de mostrar caracteres en una sección CDATA:

Sucede básicamente así:

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

Entiendo esto:

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

Pero quiero esto:

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

Entonces, ¿cómo puedo sacar una sección CDATA con un Sax ContentHandler?


Se está escapando porque la función handler.characters está diseñada para escapar y la parte <![CDATA[ no se considera parte del valor.

Necesita usar los métodos recientemente expuestos en DefaultHandler2 o usar el enfoque de TransformerHandler donde puede establecer la clave de salida CDATA_SECTION_ELEMENTS , que toma una lista delimitada en blanco de nombres de etiquetas que deben mostrar secciones de subtexto incluidas en CDATA.

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();