【问题标题】:Convert org.w3c.dom.Node into Document将 org.w3c.dom.Node 转换为 Document
【发布时间】:2012-10-28 23:51:56
【问题描述】:

我有一个Node 来自一个Document。我想把那个Node 变成一个新的Document 的根节点。

我能想到的唯一方法是:

Node node = someChildNodeFromDifferentDocument;

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);

DocumentBuilder builder = factory.newDocumentBuilder();

Document newDocument = builder.newDocument();
newDocument.importNode(node);
newDocument.appendChild(node);

这行得通,但我觉得它很烦人。有没有我没有看到的更简洁/更直接的方式,还是我必须这样做?

【问题讨论】:

标签: java domdocument xmlnode


【解决方案1】:

您可以使用cloneNode 简单地克隆旧文档,然后将其类型转换为Document,如下所示:

Document newDocument = (Document) node.cloneNode(true);

【讨论】:

    【解决方案2】:

    来自节点的文档

    Document document = node.getOwnerDocument();
    

    【讨论】:

    • 只是想指出,使用node.getOwnerDocument()返回整个原始文档,而不是node可以代表的子部分。
    【解决方案3】:

    也许你可以使用这个代码:

    String xmlResult = XMLHelper.nodeToXMLString(node);
    Document docDataItem = DOMHelper.stringToDOM(xmlResult);    
    

    【讨论】:

    • 答案至少应该指出在哪里可以找到 XMLHelper 和 DOMHelper 的实现,因为它们不在 Java 标准库中。
    【解决方案4】:

    该代码对我不起作用 - 但是通过对 related question 的一些更改,我可以让它按如下方式工作:

    Node node = someChildNodeFromDifferentDocument;
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    factory.setNamespaceAware(true);
    DocumentBuilder builder = factory.newDocumentBuilder();
    Document newDocument = builder.newDocument();
    Node importedNode = newDocument.importNode(node, true);
    newDocument.appendChild(importedNode);
    

    【讨论】:

      【解决方案5】:

      这对我来说似乎是正确的。虽然它看起来确实一般冗长,但它肯定不会比使用 DOM API 的其他代码看起来更冗长。不幸的是,这只是一个烦人的 API。

      当然,如果您已经从其他地方获得了DocumentBuilder,那就更简单了——这样可以省去很多代码。

      【讨论】:

      • 好吧,我想我只需要接受它:p 是的,在我的实际代码中,我创建了一个 XmlHelper 来处理工厂等。
      • @Svish: 对 - 如果您需要在多个地方执行此操作,您可以轻松地在帮助程序类中编写 createDocument 方法 :)
      猜你喜欢
      • 2011-01-14
      • 2023-03-25
      • 2014-01-15
      • 2012-03-31
      • 2015-10-01
      • 2018-02-21
      • 1970-01-01
      • 2022-01-15
      • 2017-01-19
      相关资源
      最近更新 更多