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

  FORUM HardWare.fr
  Programmation
  XML/XSL

  Rajouter des éléments à l’aide de chaine de caractère

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Rajouter des éléments à l’aide de chaine de caractère

n°1538228
finch911
Posté le 04-04-2007 à 10:00:41  profilanswer
 

Bonjour,
J%u2019aimerais rajouter des informations à un XML préexistant avec dom a partir d%u2019une chaine de caractère.
Le tout en JAVA.

 

Par exemple :
Document document ;

 

Contient :

 

<annuaire>
*<personne>
**<nom>Smith</nom>
**<prenom>John</prenom>
*</personne>
*<personne>
**<nom>Dupont</nom>
**<prenom>Pierre</prenom>
*</personne>
</annuaire>

 

Je souhaite recevoir une chaine de caractère

 

String nouveauxMembres

 

Qui contient la chaine :

 

*<personne>
**<nom>Gary</nom>
**<prenom>Cooper</prenom>
*</personne>
*<personne>
**<nom>Einstein</nom>
**<prenom>Albert</prenom>
*</personne>

 

Je souhaiterais pouvoir faire une opération genre :

 

ElementAnnuaire.addSousElement(nouveauxMembres)

 

et avoir au final dans document :

 

<annuaire>
*<personne>
**<nom>Smith</nom>
**<prenom>John</prenom>
*</personne>
*<personne>
**<nom>Dupont</nom>
**<prenom>Pierre</prenom>
*</personne>
*<personne>
**<nom>Gary</nom>
**<prenom>Cooper</prenom>
*</personne>
*<personne>
**<nom>Einstein</nom>
**<prenom>Albert</prenom>
*</personne>
</annuaire>

 

Mon cas est beaucoup plus compexe que celui %u2013ci, en fait je manipule du SVG, donc écartez la solution qui consiste a extraire les infos utiles du texte et a les balancer a des setAttribute ou a des createElement.

 

Merci d%u2019avance !


Message édité par finch911 le 04-04-2007 à 11:49:15
mood
Publicité
Posté le 04-04-2007 à 10:00:41  profilanswer
 

n°1538633
rx__
Paint It Black
Posté le 04-04-2007 à 20:09:17  profilanswer
 

Tu dois d'abord transformer ton String en DOM (en utilisant un DocumentBuilder). Ensuite si je me souviens bien tu dois importer ce nouveau document dans celui que tu avais déja avec document.importNode(). Et après tu peux faire un appendChild() à l'endroit qui t'intéresse.

n°1539058
finch911
Posté le 05-04-2007 à 16:13:37  profilanswer
 

Code :
  1. DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
  2. DocumentBuilder db = dbf.newDocumentBuilder();
  3. InputSource is = new InputSource(new StringReader(strDonneeSVGaAjouter));
  4. Document newDoc = db.parse(is);
  5.            
  6. Element e = document.getElementById("1" );
  7.            
  8. e.appendChild(newDoc);


 
La chaine de caractère xml est strDonneeSVGaAjouter
Le document de base qui contient déjà du svg est document
 
Voilà l'erreur que j'ai:

org.w3c.dom.DOMException: The current node (type: 1, name: g) do not allow children of the given type (type: 9, name: #document)

 
 
Si j'essaie: document.importNode(newDoc,true);
 
j'ai:
org.w3c.dom.DOMException: Cannot import node.
 
 
Je souhaite ajouter a l'élément "<g id="1">" ce nouveau document. Comment convertir le type document en un type élement qu'il accepterai?


Message édité par finch911 le 05-04-2007 à 16:18:35
n°1539065
0x90
Posté le 05-04-2007 à 16:16:21  profilanswer
 

Tu dois pas appender le document (newDoc) mais plutot le node à la racine du document.


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
n°1539317
rx__
Paint It Black
Posté le 06-04-2007 à 00:26:53  profilanswer
 

Pour clarifier les choses, voici la note du w3c sur le importNode(): http://www.w3.org/DOM/faq.html#ownerdoc
Il y a des chances que le e.appendChild(newDoc.getDocumentElement()) fonctionne mais visiblement un e.appendChild(document.importNode(newDoc.getDocumentElement(), true)) est préférable.

n°1540666
finch911
Posté le 10-04-2007 à 11:34:14  profilanswer
 

Element e = document.getElementById("pwet" );
e.appendChild(newDoc.importNode(newDoc.getDocumentElement(), true));
 
J'ai:
 
org.w3c.dom.DOMException: The given node (type: 1, name: g) was not > created by the current document.

n°1540951
rx__
Paint It Black
Posté le 10-04-2007 à 19:09:26  profilanswer
 

C'est curieux, chez moi c'est l'inverse. J'ai fait le test avec le code suivant (testé avec le JDK 1.4.2 ou 1.5).

Code :
  1. import java.io.*;
  2. import java.util.*;
  3. import javax.xml.parsers.*;
  4. import org.w3c.dom.*;
  5. import org.apache.xml.serialize.*;
  6. public class Essai {
  7. public static void main(String[] args) throws Exception {
  8.  DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder();
  9.  Document a = db.parse(new FileInputStream(args[0]));
  10.  Document b = db.parse(new FileInputStream(args[1]));
  11.  Element a1 = (Element)a.getDocumentElement().getFirstChild();
  12.  Element b1 = (Element)b.getDocumentElement().getFirstChild();
  13.  // Ceci ne fonctionne pas
  14. //  a1.appendChild(b1);
  15.  // Ceci fonctionne
  16.  a1.appendChild(a.importNode(b1, true));
  17.  XMLSerializer serializer = new XMLSerializer(System.out, null);
  18.  serializer.serialize(a);
  19. }
  20. }


En input j'ai respectivement des fichiers contenant "<a><a1><a2/></a1></a>" et "<b><b1><b2/></b1></b>".
 
Si j'essaye avec "a1.appendChild(b1)" j'ai bien "org.w3c.dom.DOMException: WRONG_DOCUMENT_ERR: A node is used in a different document than the one that created it."
 
Mais avec le "a1.appendChild(a.importNode(b1, true))" j'obtiens "<a><a1><a2/><b1><b2/></b1></a1></a>" comme attendu.

n°1543495
finch911
Posté le 16-04-2007 à 20:12:16  profilanswer
 

Merci, ca marche!

n°1751951
jaussiba
Posté le 26-06-2008 à 17:58:54  profilanswer
 

Salut a tous,
 
 
je suis interessé par votre example car j'ai un souci proche de votre solution.
 
la différence avec l'exemple de rx__, c'est que au lieu d'ajouter un element dans un document,
je veux ajouter un obejt de type noeud.
 
 
avez vous une solution.  
 
Pour plus d'explication j'ai posté un autre message sur un autre forum : http://www.developpez.net/forums/s [...] ost3424129
 
 
merci pour votre aide
 
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  XML/XSL

  Rajouter des éléments à l’aide de chaine de caractère

 

Sujets relatifs
[vbs] [SOLVED!!] Simple remplacement de chaine...[Résolu] Pb modification structure table pr rajouter auto-increment
[aide] Commande unix prob avec 'Û'Besoin d'aide sur ATL/COM
Aide pour un programme de recherche SVP[AIDE] Formule Excel avec nom de feuille variable
Débutant PHP,besoin d'aidebesoin d'aide svppppp
aide pour creation annuaire (débutant)[MATLAB] aide pour ecrire dans un fichier
Plus de sujets relatifs à : Rajouter des éléments à l’aide de chaine de caractère


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)