Mon but est de lire le fichier xml dans l'objet Dom, de modifier l'objet dom, ce qui implique la suppression de certains nœuds. Une fois cela fait, je souhaite restaurer le Dom dans son état d'origine sans réellement analyser le fichier .xml. Y at-il de toute façon je peux cloner l'objet dom obtenu après avoir analysé le fichier xml pour la première fois. l'idée est d'éviter de lire et d'analyser xml tout le temps, il suffit de garder une copie de l'arbre d'origine.Clonage de l'objet dom.Document
Répondre
TransformerFactory tfactory = TransformerFactory.newInstance();
Transformer tx = tfactory.newTransformer();
DOMSource source = new DOMSource(doc);
DOMResult result = new DOMResult();
tx.transform(source,result);
return (Document)result.getNode();
Ceci serait la solution Java 1.5 pour faire une copie du document DOM. Jetez un oeil à Transformer Factory et Transformer
isEqualNode() ne retourne pas true si vous copiez de cette manière – ka3ak
Cette méthode permet de continuer à traiter les instructions et les commentaires dans la copie! –
Vous pouvez utiliser importNode API sur org.w3c.dom.Document:
Node copy = document.importNode(node, true);
Exemple complet
import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Node;
public class Demo {
public static void main(String[] args) throws Exception {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document originalDocument = db.parse(new File("input.xml"));
Node originalRoot = originalDocument.getDocumentElement();
Document copiedDocument = db.newDocument();
Node copiedRoot = copiedDocument.importNode(originalRoot, true);
copiedDocument.appendChild(copiedRoot);
}
}
Attention, cette façon de copier le document supprimera les instructions de traitement ou les commentaires dans le fichier! –
Je crois que cela supprimera toute UserData qui a été ajoutée à tous les nœuds de l'ancien document! Il est logique que cela le fasse, mais il faut être conscient – ParkerHalo
vous pouvez cloner un tree ou seulement le noeud avec DOMs cloneNode (boolean isDeepCopy) API.
Document originalDoc = parseDoc();
Document clonedDoc = originalDoc.cloneNode(true);
malheureusement, depuis cloneNode() sur le document est (selon API) mise en œuvre spécifique, nous devons aller un moyen de l'épreuve des balles, qui est, créer un nouveau à partir du document original du noeud cloné document et l'importation :
...
Document clonedDoc = documentFactory.newDocument();
cloneDoc.appendChild(
cloneDoc.importNode(originalDoc.getDocumentElement(), true)
);
noter qu'aucune des opérations sont thread-safe, donc soit les utiliser que localement, ou local fil ou les synchroniser.
Je voudrais coller avec la deuxième suggestion avec TransformerFactory. Avec importNode, vous n'obtenez pas une copie complète du document. L'en-tête n'est pas copié.
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?aid style="50" type="snippet" readerVersion="6.0" featureSet="257" product="8.0(370)" ?>
<?aid SnippetType="PageItem"?><Document DOMVersion="8.0" Self="d">
Cela ne retournerait pas ce qui précède car cela n'est pas copié. Il utilisera ce que votre nouveau document contient.
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
- 1. Clonage avec et sans clonage
- 2. groupe svg de clonage
- 3. Instance indépendante de clonage
- 4. éléments de clonage avec jquery
- 5. C++ - clonage classe de base
- 6. champs de clonage avec angularjs
- 7. Clonage d'un groupe de svg
- 8. Problème de clonage d'obj Java
- 9. Solution universelle de clonage d'objets
- 10. des données hiérarchiques de clonage
- 11. objets de clonage en C#
- 12. Clonage Jquery clonage au lieu du nouveau nom
- 13. Réflexion ou clonage() C#
- 14. clonage ou nonmodifiableCollection
- 15. Extjs Clonage d'un panneau
- 16. Clonage d'un objet Java
- 17. Clonage VARIANT dans ActiveX
- 18. Clonage AJAX TabPanels
- 19. Clonage d'un composant TStringGrid
- 20. Clonage d'abonné d'événement
- 21. Clonage d'une classe
- 22. Clonage d'un java LinkedHashMap
- 23. C# réflexion, le clonage
- 24. Clonage d'un objet
- 25. clonage des contrôles
- 26. météorite Clonage Mac
- 27. Git et clonage
- 28. Clonage d'un membre mutable
- 29. Oauth clonage sur bitbucket
- 30. Clonage profond dans Yui3
possible de duper http://stackoverflow.com/questions/279154/how-can-i-clone-an-entire-document-using-the-java-dom –