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

Format d'échange (XML, JSON...) Java Discussion :

Problème de namespace (un nouveau) ou de transformation des < et > [JDOM]


Sujet :

Format d'échange (XML, JSON...) Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 69
    Par défaut Problème de namespace (un nouveau) ou de transformation des < et >
    Bon bon, hier avec xandralene on a trouvé des solutions à nos problèmes de namespace (ah ah avec les forums on a l'impression d'avoir le don d'ubiquité).

    Seulement ce problème revient sous une autre forme: le body se voit réattribué un namespace lorsqu'il est utilisé dans un fichier XML (pas HTML).

    J'ai mon élément BODY avec ses children qui vient d'un HTML.
    Maintenant je veux le mettre dans un fichier XML qui contient un tas d'informations + le contenu de BODY.

    Donc j'ai le BODY en tant que JDom Element. Il n'a pas de père (méthode detach()). C'est bon.

    J'ai le fichier XML suivant (simplifié):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <content>
       <xhtml_fragment>
       </xhtml_fragment>
    </content>
    Dans xhtml_fragment je dois rajouter l'élement BODY. Et là JDom me remet un namespace!

    Mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Element xhtml_fragment = new Element("xhtml_fragment");
    xhtml_fragment.addContent(Body);
    Le résultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     <xhtml_fragment>
          <body xmlns="http://www.w3.org/1999/xhtml">
    
            <table width="100%" border="0" cellspacing="2">
              <tr>
                <td width="15%" rowspan="1" colspan="1">
                  <p class="c1">
    Donc on voit bien que le namespace est rajouté par JDom!!! j'ai vérifié le contenu de body juste avant le addContent grâce au débugger d'eclipse.

    Donc ça c'est mon problème. Comment faire pour qu'il ne rajoute pas le namespace?
    si je fais body.setNamespace(null) alors jdom me rajoute le namespace sur la table en dessous.

    J'ai essayé de trouver une solution de contournement. Par exemple passer le BODY en String. J'ai donc écrit une méthode static docToString (récupérée et adaptée depuis le lien suivant: ).

    A toute fins utiles et pour le reuse je vous mets mon code docToString là:

    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
    import org.apache.log4j.Logger;
    import org.jdom.Attribute;
    import org.jdom.Element;
     
    public class JDomTools {
     
    	private static Logger LOGGER = Logger.getLogger(JDomTools.class);
     
    	private static String getElement(Element element) {
    		String Element = "<" + element.getName().toString();
    		if (element.getAttributes().size()>0) {
    			for (int m = 0; m < element.getAttributes().size();m++) {
    				Element += " " + ((Attribute) element.getAttributes().get(m)).getName().toString();
    				Element += "='" + ((Attribute) element.getAttributes().get(m)).getValue() + "'";
    			}
    		}
    		Element += ">";
    		if (!(element.getChildren().size()>0)) {
    			Element += "</" + element.getName().toString() + ">";
    		}
    		return Element;
    	}
     
    	private static String getAllElements(Element element) {
    		String document = "";
    		if (element.getChildren().size()>0) {
    			for (int i = 0; i<element.getChildren().size();i++) {
    				document += getElement((Element) element.getChildren().get(i));
    				document += getAllElements((Element) element.getChildren().get(i));
    				if (i == element.getChildren().size()-1) {
    					document += "</" + element.getName().toString() + ">";
    				}
    			}
    		}
    		return document;
    	}
     
    	public static String docToString(Element body) {
    		String newDocument = "";
    		Element element = body;
    		newDocument += "<" + element.getName().toString() + ">";
    		if (element.getAttributes().size()>0) {
    			for (int i =0; i<element.getAttributes().size(); i++) {
    				newDocument += ((Attribute) element.getAttributes().get(i)).getName().toString();
    			}
    		}
     
    		newDocument += getAllElements(element);
    		LOGGER.debug("BODY to string is: " + newDocument);
    		return newDocument;
    	} 
    }
    Je récupère la bonne String.

    Et donc mon code de création du XML final devient:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Element xhtml_fragment = new Element("xhtml_fragment");
    String sBody = JDomTools.docToString(body);		
    xhtml_fragment3.setText(sBody); //using the string instead of the element avoid leading to namespace problems.
    Je peux aussi écrire à la place de la dernière ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xhtml_fragment3.addContent(sBody);
    Alors là plus de problème de namespace, mais les < et > sont transformés en &lt; et &gt; ce qui ne va pas car par la suite je réutilise le BODY dans un autre html généré à partir du XML.

    Donc cela engendre une autre question (je me demande si je ne devrais pas ouvrir un autre thread pour cette question):

    Est-il possible de spécifier aux méthodes addContent(String) ou setText(String) de ne pas transformer les < et > en &lt; et &gt; ????

    Merci pour vos réponses.

  2. #2
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 3
    Par défaut
    Bonjour Pedro4,

    Dans les balises précédent <content> de ton fichier XML tu fais appel à ce namespace "http://www.w3.org/1999/xhtml" ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 69
    Par défaut non...
    non je n'ai pas mis de namespace sur l'élément content. content est le root élément de mon xml.

    Ce doit absolument être un élément XML sans attribut. Cela pour respecter la dtd du framework dans lequel je dois l'injecter.
    Donc il ne me faut aucun namespace du tout.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 69
    Par défaut Ce que je fais
    Bon, il n'y avait pas de solution à mon problème:
    J'ai voulu passer de DOM à SAX mais les mêmes erreurs étaient générées.
    Donc maintenant je parse mon String BODY pour en faire des éléments SAX ou DOM (je me retrouve avec 2 solutions)!
    J'utilise l'algorythme adapté DocToString de mes messages précédents pour faire cela.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XSD] Problème de namespace
    Par pierrelm dans le forum Valider
    Réponses: 3
    Dernier message: 14/09/2006, 01h19
  2. [xsl] namespace dans le html apres transformation xslt...
    Par -ADX- dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 15/05/2006, 14h16
  3. [DOM] Problème de namespace
    Par dauggui dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 26/04/2006, 07h22
  4. Problème de lettre sur nouveau serveur
    Par gobs dans le forum Langage
    Réponses: 2
    Dernier message: 19/01/2006, 23h31
  5. Problème de détection de nouveau processeur
    Par zakfa dans le forum Composants
    Réponses: 12
    Dernier message: 24/01/2005, 17h09

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