Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1065 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Problème de namespace

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème de namespace

n°1547918
finch911
Posté le 24-04-2007 à 11:22:55  profilanswer
 

Hello,
 
J'ai un problème lorsque j'essaye d'ajouter un nouveau noeud à un Document Dom.
Le contexte de mon problème se situe dans l'API Batik pour Java.  
Mais mon problème ne vient pas directement d'elle mais bien de Dom.
 
Donc même si vous connaissez pas Batik, prenez le temps de lire ;-)
 
Contexte: J'essaye d'ajouter du nouveau contenu SVG (image sous forme xml) sous forme de String à un Document Dom qui existe déjà.
Problème: Le jsvgcanvas (classe qui gère l'affichage) ne se rafraichit pas a cause des namespaces.
 
Pour résumer:
Je lis un fichier à l'aide du jsvgcanvas:
svgCanvas.setURI(url);
Il m'affiche le fichier SVG à l'écran.
Quand tout est chargé, je récupère le Document Dom
Document document = svgCanvas.getSVGDocument();
 
J'ai essayé d'ajouter un nouvel élément avec les méthodes createElement et setAttribut. Ca n'a pas marché pas.
J'ai un peu regarder sur les mailing, il est impératif de préciser le namespace si on veut un rafraichissement.
 
J'essaye ça (ajoute un bete rectangle rouge):
 
String svgNS="http://www.w3.org/2000/svg";
Element rectangle = document.createElementNS(svgNS, "rect" );
rectangle.setAttributeNS (null, "x", "1200" );
rectangle.setAttributeNS(null, "y", "2200" );
rectangle.setAttributeNS(null, "width", "3100" );
rectangle.setAttributeNS(null, "height", "3510" );
rectangle.setAttributeNS(null, "style", "stroke: red; fill: red;" );
 
a1.appendChild(rectangle); //ou a1 est le fils du root du document;
 
svgCanvas.setSVGDocument((SVGDocument)document);
 
 
Pouffff...ouéééé ca marche! Le truc se rafraichit et m'affiche un joli rectangle.
 
Mon problème c'est que:
1) Mon programme ne peut (malheuresement) pas se limiter a ajouter un simple rectangle
2) Il ne peut pas créer des éléments par CreateElementNS mais il doit récupérer une chaine de caractère d'élément svg qui ressemblerait à ça:
 
String s =  
"<g id="101" name="test" xmlns="http://www.w3.org/2000/svg">
<polyline points="8325 2232, 8325 2540" style="fill:none; stroke:rgb(255,000,000);"/>
<polyline points="7925 2232, 7925 2540" style="fill:none; stroke:rgb(255,000,000);"/>
<polyline points="7525 2232, 7525 2540" style="fill:none; stroke:rgb(255,000,000);"/>
...
</g>"
 
Je parse la String dans un nouveau document (newLayer). et là je rencontre un truc assez bizarre
 
Element newLayerRoot = (Element)newLayer.getDocumentElement(); //l'élément g de la chaine
 
System.out.println("Element:" + newLayerRoot.getTagName() + " Name:" + newLayerRoot.getAttribute("name" ) + " Namespace:" + newLayerRoot.getNamespaceURI());
 
Ca me donne "Element:g Name:test Namespace:null" // <=== null!!!!!
 
//ajoute le nouveau noeud au document principale
a1.appendChild(document.importNode(newLayerRoot, true));
 
//aucun rafraichissement...
svgCanvas.setSVGDocument((SVGDocument)document);
 
Bref il y vraiment un problème de Namespace!
 
De plus si je serialize le document final dans un fichier, tout est ok.  
Sauf que l'élement g n'a pas de namespace (qu'il a perdu depuis le parsing):
<svg>
...
<g name="test" id="101">
<polyline style="fill:none; stroke:rgb(255,000,000);" points="8325 2232, 8325 2540"/>
<polyline style="fill:none; stroke:rgb(255,000,000);" points="7925 2232, 7925 2540"/>
...
</g>
</svg>
 
 
Donc, j'en conclu qu'il y a un gros problème de namespace!
On m'a dit que c'était avant le parsing qu'il fallait le préciser.
Mais j'ai essayer de l'ajouter après "setAttribute("xmlns"....)" mais ca ne marche pas.
 
Bref, comment pourrais je faire pour (accrochez vous), à partir d'une chaine dont le root contient le namespace obtenir un nouveau document conforme, dont le root contient toujours le namespace après le parsing.


Message édité par finch911 le 24-04-2007 à 11:29:37
mood
Publicité
Posté le 24-04-2007 à 11:22:55  profilanswer
 

n°1548176
finch911
Posté le 24-04-2007 à 15:27:28  profilanswer
 

Problème résolu a coup de setNamespaceAware(true); dans le document builder  ;)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Problème de namespace

 

Sujets relatifs
Problème avec une calculatrice[CSS?] Problème de titre avec IE.
Problème avec Debug avec log4j[.Net - VSTO] Problème de tableaux dans word
gérer plusieur $_SESSION problemeproblème avec UndeclaredThrowableException !!!
Problème avec Wamp et code PHPproblème pour range(variable)
probleme transfert ftpProblème de Namespace (EXSLT)
Plus de sujets relatifs à : Problème de namespace


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR