IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement Web en Java Discussion :

Parsing d'un document XML : Problème des caractères spéciaux


Sujet :

Développement Web en Java

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 99
    Points : 1
    Points
    1
    Par défaut 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 &#123 (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 &#123 redevient le é)
    Je ne veux pas ! car la sortie est dédié à une page web (XHTML).

    Voici mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 99
    Points : 1
    Points
    1
    Par défaut
    Voilà ma sortie par ex. juste en fin de méthode :

    <sol:formula max="50000" min="1000" name="Taux réduits" type="fpb">

    alors qu'en entrée ma String XML était

    <sol:formula max="50000" min="1000" name="Taux r&#453duits" type="fpb">

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 99
    Points : 1
    Points
    1
    Par défaut
    Je suis arrivé à quelque chose qui me satisfait, bien que dans l'absolu, le problème n'est pas résolu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    //document to string
    			Source source = new DOMSource( lXML );
    			StringWriter stringWriter = new StringWriter();
    			Result result = new StreamResult( stringWriter );
     
    			Transformer transformer = TransformerFactory.newInstance()
    					.newTransformer();
    			transformer.setOutputProperty( OutputKeys.METHOD, "html" );
    			transformer.setOutputProperty( OutputKeys.INDENT, "yes" );
    			transformer.setOutputProperty( OutputKeys.OMIT_XML_DECLARATION,
    					"yes" );
    			transformer.transform( source, result );
    			return stringWriter.getBuffer().toString();
    L'instruction magique c'est celle-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    transformer.setOutputProperty( OutputKeys.METHOD, "html" );
    Cela veut dire que les entité XML (par ex. &#123) sera converti en entité HTML (par ex. &eacute) ce qui est OK pour la cible (qui est une page HTML), ceci dit je ne sais toujours pas comment faire pour ne pas toucher au &#123


Discussions similaires

  1. Réponses: 6
    Dernier message: 10/12/2014, 11h00
  2. Problème des caractères spéciaux
    Par reito dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 22/07/2010, 17h20
  3. SOAP - Problèmes des caractères spéciaux
    Par InesNael dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 21/03/2008, 11h34
  4. [XML] Problème de caractères spéciaux ( & )
    Par kenny49 dans le forum XML/XSL et SOAP
    Réponses: 9
    Dernier message: 17/03/2007, 21h37
  5. [JDOM] Parser un xml contenant des caractères spéciaux
    Par Baptiste Wicht dans le forum Format d'échange (XML, JSON...)
    Réponses: 16
    Dernier message: 19/07/2006, 12h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo