Parsing d'un document XML : Problème des caractères spéciaux
Bonjour,
Je dispose d'un document XML déjà encodé en XML
J'entends par là qu'un noeud de type text (un noeud terminal) peut avoir pour valeur { (pour encoder le é par ex.)
Lorsque ce document XML (sous forme d'une String) passe dans la moulinette d'un transformer (je cherche à fusionner cette String XML avec une autre, d'où la nécessité d'un transformer), il en ressort un document qui "unescape" le XML (le { redevient le é)
Je ne veux pas ! car la sortie est dédié à une page web (XHTML).
Voici mon code
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
|
Simulator lSimulator = simulatorPersistence
.findByPrimaryKey( pIdSimulator );
String lDataXml = getXMLData( pIdSimulator, pEncodeHtml );
String lConfigXml = getXMLConfig( lSimulator.getType(),
pJsonConfigObj );
//ajoute la config xml
DocumentBuilderFactory lDocFactory = DocumentBuilderFactory
.newInstance();
DocumentBuilder parser = lDocFactory.newDocumentBuilder();
Document lDataDocument = parser.parse( new InputSource(
new StringReader(
lDataXml ) ) );
Document lConfigDocument = parser.parse( new InputSource(
new StringReader( lConfigXml ) ) );
Document lXML = parser.newDocument();
lXML.createProcessingInstruction(
Result.PI_DISABLE_OUTPUT_ESCAPING, "" );
DocumentFragment fragment = lXML.createDocumentFragment();
fragment.appendChild( lXML.importNode(
lConfigDocument.getDocumentElement(), true ) );
//append data root elt
lXML.appendChild( lXML.importNode(
lDataDocument.getDocumentElement(), true ) );
//append config elt
lXML.getDocumentElement().insertBefore( fragment,
lXML.getDocumentElement().getFirstChild() );
//document to string
Source source = new DOMSource( lXML );
StringWriter stringWriter = new StringWriter();
Result result = new StreamResult( stringWriter );
TransformerFactory ff = TransformerFactory.newInstance();
//J'ai essaié ça ci-dessous mais ca fait planter
ff.setAttribute( Result.PI_DISABLE_OUTPUT_ESCAPING, Boolean.TRUE );
Transformer transformer = ff.newTransformer();
transformer.setOutputProperty( OutputKeys.OMIT_XML_DECLARATION,
"yes" );
transformer.transform( source, result );
return stringWriter.getBuffer().toString(); |
Merci de votre aide.