当前位置: 首页 > 面试题库 >

如何使用Java将DOM节点从一个文档复制到另一个文档?

白博易
2023-03-14
问题内容

将节点从一个文档复制到另一个文档时遇到问题。我已经使用了Node中的acceptNode和importNode方法,但是它们不起作用。我也尝试了appendChild,但是抛出了异常。我正在使用Xerces。那里没有实现吗?还有另一种方法吗?

    List<Node> nodesToCopy = ...;
    Document newDoc = ...;
    for(Node n : nodesToCopy) {
        // this doesn't work
        newDoc.adoptChild(n);
        // neither does this
        //newDoc.importNode(n, true);
    }

问题答案:

问题在于,节点的上下文包含许多内部状态,其中包括其父项和拥有它们的文档。无论是adoptChild()importNode()将目标文档,这就是为什么你的代码是没有的新节点的任何地方。

由于要复制节点而不要将其从一个文档移动到另一个文档,因此需要采取三个不同的步骤…

  1. 创建副本
  2. 将复制的节点导入到目标文档中
  3. 将副本放置在新文档中的正确位置
    for(Node n : nodesToCopy) {
        // Create a duplicate node
        Node newNode = n.cloneNode(true);
        // Transfer ownership of the new node into the destination document
        newDoc.adoptNode(newNode);
        // Make the new node an actual item in the target document
        newDoc.getDocumentElement().appendChild(newNode);
    }

Java Document API允许您使用组合前两个操作importNode()

    for(Node n : nodesToCopy) {
        // Create a duplicate node and transfer ownership of the
        // new node into the destination document
        Node newNode = newDoc.importNode(n, true);
        // Make the new node an actual item in the target document
        newDoc.getDocumentElement().appendChild(newNode);
    }

true参数cloneNode()importNode()指定是否需要深拷贝,这意味着复制节点和所有它的孩子。由于您有99%的时间想要复制整个子树,因此几乎总是希望这是事实。



 类似资料:
  • 如何使用java将文件从一个文件夹复制到另一个文件夹?我试图使用 如果目标文件夹不包含具有相同名称的文件,则此操作有效。如果我尝试将文件粘贴到文件夹中,它会引发IOException。然而,有什么办法可以解决这个问题吗?可能我只想将自动重命名为pasteItem(1)或类似名称的文件粘贴。请建议。 事实上,如果同名文件已经存在,我将为该文件获得一个新名称。我不知道如何复制文件,然后重命名。如果我先

  • 问题内容: 我有两个Java.io.File对象file1和file2。我想将内容从file1复制到file2。有没有一种标准的方法可以执行此操作,而无需创建必须读取文件1并写入文件2的方法 问题答案: 不,没有内置方法可以做到这一点。与您要完成的工作最接近的是from 的方法,如下所示: 并且不要忘记处理异常并在一个块中关闭所有内容。

  • 问题内容: 我想使用Java将文件从一个目录复制到另一个目录(子目录)。我有一个包含文本文件的目录dir。我遍历dir中的前20个文件,并想将它们复制到dir目录中的另一个目录中,该目录是我在迭代之前创建的。在代码中,我想将(代表第ith个文本文件或审阅)复制到。我怎样才能做到这一点?似乎没有这样的功能(或者我找不到)。谢谢。 问题答案: 目前,这应该可以解决你的问题 从类阿帕奇公地IO库,因为1

  • 我有一个问题,但在我看来,我看到的所有解决方案都在解决一个比我更复杂的问题。 我对MongoDB比较陌生,但我一直在将它与Apache Neach一起使用来存储抓取的文档。由于我分阶段抓取,并以不同的方式评估每个抓取的结果,以获取统计数据,因此我一直将结果存储在不同的集合中。 我所要做的就是把这些收藏放在一起成为一个大的收藏,这样我就可以翻译和分类。所有字段都是相同的,因此我不需要添加任何新字段。

  • 我正在尝试使用Node将文件从AWS S3存储桶复制到另一个存储桶。问题是,如果文件名没有空格,例如:“abc.csv”,它就可以正常工作。但如果我要复制到的文件名中有空格,例如:“abc xyz.csv”。它抛出了下面的错误。 “指定的密钥不存在。”“NoSuchKey:指定的密钥不存在。应请求。extractError(d:\Projects\Other\testproject\s3filet

  • 我已经很多年没有使用VB了,所以如果这是显而易见的,请原谅我。我正在尝试编写一个word vba宏,以便在模板中使用,该模板将显示一个userform,然后导入fileA的内容。docx,fileB。docx或fileC。docx取决于用户表单。(之后我将使用书签填写一些表单数据,我不知道这是否相关)。文件A、B和C将包含一些基本格式(如列表)的文本,但没有什么特别之处。 我在网上看到的解决方案可