Rajouter des éléments à laide de chaine de caractère - XML/XSL - Programmation
Marsh Posté le 04-04-2007 à 20:09:17
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.
Marsh Posté le 05-04-2007 à 16:13:37
Code :
|
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?
Marsh Posté le 05-04-2007 à 16:16:21
Tu dois pas appender le document (newDoc) mais plutot le node à la racine du document.
Marsh Posté le 06-04-2007 à 00:26:53
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.
Marsh Posté le 10-04-2007 à 11:34:14
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.
Marsh Posté le 10-04-2007 à 19:09:26
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 :
|
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.
Marsh Posté le 26-06-2008 à 17:58:54
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
Marsh Posté le 04-04-2007 à 10:00:41
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