2008-09-17 8 views
2

Une API me renvoie XmlCursor pointant à la racine du document XML. J'ai besoin d'insérer tout cela dans un autre document org.w3c.DOM représenté.Comment insérer du contenu XmlCursor dans DOM Document

Au début: XmlCursor poiting sur

<a> <b> some text </b> </a>

DOM Document:

<foo>

</foo>

A la fin je veux avoir le document DOM original est modifié comme suit:

<foo>

  <someOtherInsertedElement>

    <a> <b> some text </b> </a>

  </someOtherInsertedElement>

</foo>

NOTE: document.importNode(cursor.getDomNode()) doesn 't travail - Exception est levée: NOT_SUPPORTED_ERR: L'implémentation ne prend pas en charge le type d'objet demandé ou opération.

Répondre

6

Essayez quelque chose comme ceci:

Node originalNode = cursor.getDomNode(); 
Node importNode = document.importNode(originalNode.getFirstChild()); 
Node otherNode = document.createElement("someOtherInsertedElement"); 
otherNode.appendChild(importNode); 
document.appendChild(otherNode); 

En d'autres termes:

  1. Obtenez le nœud DOM du curseur. Dans ce cas, c'est un DOMDocument, alors getFirstChild() pour obtenir le noeud racine.
  2. Importez-le dans le DOMDocument.
  3. Faites d'autres choses avec le DOMDocument.
  4. Ajouter le noeud importé au noeud droit.

La raison de l'importation est qu'un noeud "appartient" toujours à un DOMDocument donné. Le simple ajout du noeud d'origine entraînerait des exceptions.

+0

échoue sur importNode: org.w3c.dom.DOMException: NOT_SUPPORTED_ERR: La mise en œuvre ne supporte pas le type d'objet ou d'opération demandé. à org.apache.xerces.dom.CoreDocumentImpl.importNode (source inconnue) à org.apache.xerces.dom.CoreDocumentImpl.importNode (source inconnue) – Juraj

+0

ah. C'est probablement parce que vous importez un DOMDocument. Mon mauvais, j'ai raté ce peu. essayez cursor.getDomNode.getFirstChild() – Sietse

+0

cursor.getDomNode.getFirstChild() aidé. Merci beaucoup. pls le corriger dans votre réponse (je n'ai pas assez de réputation pour le faire moi-même:]) – Juraj

1

J'avais le même problème.

Ce périclite:

Node importNode = document.importNode(originalNode);

Ce résolu le problème:

Node importNode = document.importNode(originalNode.getFirstChild());

+0

ne sait pas pourquoi, mais cela a aidé! Merci – oleh

Questions connexes