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 :

Créer des attributs dans un autre namespace


Sujet :

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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut Créer des attributs dans un autre namespace
    Bonjour,

    j'essaie de rajouter des attributs dans un autre namespace à des balises existante. Pour des raisons que j'ignore, le DOM rajoute bien l'attribut avec son préfixe, mais n'associe pas le préfixe au namespace.

    J'ai ce code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    			group = svgDocument.createElementNS(
    				SVGDOMImplementation.SVG_NAMESPACE_URI, "g");
    			Attr attr = group.getOwnerDocument().createAttributeNS("http://mycompany.com/fronts/1.0", "com:segment");
    			attr.setValue(""+i);
    			group.setAttributeNode(attr);
    			log.info("Adding group segment"+i);
    			element.appendChild(group);
    			groups[i]=group;

    Je m'attends à ce qu'il génère ceci:

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?xml version="1.0" encoding="UTF-8"?>
    <g xmlns="http://www.w3.org/2000/svg" style="opacity:1.000000">
    <g com:segment="0" xmlns:com="http://mycompany.com/fronts/1.0">
    //...etc etc

    au lieu de ça, j'ai
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?xml version="1.0" encoding="UTF-8"?>
    <g xmlns="http://www.w3.org/2000/svg" style="opacity:1.000000">
    <g com:segment="0">
    //...etc etc

    Le préfixe est bien là, mais la déclaration du namespace manque. Qu'est-ce que j'oublie?

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    La JavaDoc indique qu'il faut utiliser setAttributeNodeNS() si l'attribut à ajouter a un namespace.

    À ce jour je ne comprends toujours pas pourquoi, puisque les namespaces ne sont gérés que si le document vient d'un DocumentBuilder avec setNamespaceAware(true)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Nope, aucun changement, j'ai toujours le com:segment, mais pas la déclaration du namespace com :/. Voilà les codes que j'ai essayé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    			SVGElement group = (SVGElement) svgDocument.createElementNS(
    				SVGDOMImplementation.SVG_NAMESPACE_URI, "g");
    			Attr attr = group.getOwnerDocument().createAttributeNS("http://company.com/fronts/1.0", "com:segment");
    			attr.setValue(""+i);
    			group.setAttributeNodeNS(attr);
    			element.appendChild(group);
    			log.info("namespace: "+group.lookupNamespaceURI("com"));
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    			SVGElement group = (SVGElement) svgDocument.createElementNS(
    				SVGDOMImplementation.SVG_NAMESPACE_URI, "g");			
    			group.setAttributeNS("http://company.com/fronts/1.0", "com:segment", ""+i);
    			log.info("namespace: "+group.lookupNamespaceURI("com"));
    Note que le lookupNamespaceURI me retourne null, donc il ignore la présence du namespace dans l'attribut? :/

    Le code suivant résoud le problème, mais j'ai l'impression de forcer le namespace avec un chausse pieds et que ce n'est pas la bonne méthode, je fait le boulot que la conversion DOM->String devrait faire. Note que la conversion en question en String se fait via l'utilisation d'un simple transformer identitaire. Le DOM est bien namespace aware, puisqu'il s'agit d'un dom SVG contenant déjà deux namespaces (xvg et xlink) qui eux marchent bien :/.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    			group.setAttributeNS(XMLConstants.XMLNS_ATTRIBUTE_NS_URI, "xmlns:com", "http://company.com/fronts/1.0");
    Il n'y a pas plus simplement une méthode dans Document à laquelle je peux passer une liste de namespaces à ajouter au document? Il semblerait que ça se face tout seul si je rajoute des Element ayant un namespace, mais pas si ce sont des attributs....

    En plus, si je met le namespace avec un chausse pieds sur le root element, plutot que sur l'élément que je suis occupé de remplir, quand je fais le rendu partiel d'un node, ce n'affiche plus le namespace, alors qu'avec le namespace xlink, que batik ajoute lui même, ça se fait aussi bien à l'élément racine si j'affiche tout que directement dans l'élément <image> si je n'affiche que ce dernier :/

    Et j'arrive pas à trouver dans les sources de batik où on définit ce namespace :'(

Discussions similaires

  1. Réponses: 10
    Dernier message: 09/02/2012, 10h25
  2. [XL-2007] Créer une macro pour supprimer des onglets dans un autre classeur
    Par nicosd54 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 08/03/2011, 10h01
  3. Réponses: 2
    Dernier message: 04/06/2009, 14h49
  4. Réponses: 4
    Dernier message: 19/09/2005, 15h59
  5. Réponses: 2
    Dernier message: 27/03/2005, 16h09

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