首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >克隆dom.Document对象

克隆dom.Document对象
EN

Stack Overflow用户
提问于 2011-03-08 08:04:59
回答 4查看 20.3K关注 0票数 17

我的目的是将xml文件读入Dom对象,编辑dom对象,这涉及到删除一些节点。

完成此操作后,我希望将Dom恢复到其原始状态,而不实际解析XML文件。

有没有办法克隆我在第一次解析xml文件后获得的dom对象。这个想法是为了避免一直读取和解析xml,只保留原始dom树的副本。

EN

回答 4

Stack Overflow用户

发布于 2011-03-08 09:50:08

您可以在org.w3c.dom.Document上使用importNode接口:

代码语言:javascript
复制
Node copy = document.importNode(node, true);

完整示例

代码语言:javascript
复制
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);

    }
}
票数 19
EN

Stack Overflow用户

发布于 2011-03-08 08:17:17

代码语言:javascript
复制
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();

这将是制作DOM文档副本的Java1.5解决方案。看看Transformer FactoryTransformer

票数 9
EN

Stack Overflow用户

发布于 2013-05-22 18:26:14

您可以使用DOMs (Boolean isDeepCopy)来克隆一棵树或仅克隆节点。

代码语言:javascript
复制
Document originalDoc = parseDoc();
Document clonedDoc = originalDoc.cloneNode(true);

不幸的是,由于Document上的cloneNode()是特定于(根据API)实现的,我们必须采用一种简单的方法,即创建一个新文档并从原始文档导入克隆的节点:

代码语言:javascript
复制
...
Document clonedDoc = documentFactory.newDocument();
cloneDoc.appendChild(
  cloneDoc.importNode(originalDoc.getDocumentElement(), true)
);

请注意,没有一个操作是线程安全的,因此要么仅在本地使用它们,要么使用线程本地或同步它们。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5226852

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档