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

Java将XML文档附加到现有文档

松新
2023-03-14
问题内容

我已经创建了两个XML文档,并且想将这两个文档合并到一个新的信封中。所以我有

<alert-set>
  <warning>National Weather Service...</warning>
  <start-date>5/19/2009</start-date>
  <end-date>5/19/2009</end-date>
</alert-set>

 <weather-set>
   <chance-of-rain type="percent">31</chance-of-rain>
   <conditions>Partly Cloudy</conditions>
   <temperature type="Fahrenheit">78</temperature>
 </weather-set>

我想做的是将两个节点合并到一个根节点中: 合并的文档

我尝试创建一个临时文档,并用文档的根节点替换子级:

<DataSet>
  <blank/>
  <blank/>
</DataSet>

我当时希望用两个文档的根元素替换两个空格,但我得到“
WRONG_DOCUMENT_ERR:一个节点在与创建它的文档不同的文档中使用”。我尝试采用和导入根节点,但是遇到相同的错误。

是否有一些简便的方法来合并文档,而不必为每个节点通读并创建新元素?

编辑:示例代码段暂时仅尝试将其移至“空白”文档…
importNode和acceptNode函数无法导入/采用Document节点,但它们无法导入元素节点及其子树…或者确实如此,它似乎仍然无法添加/替换。

    Document xmlDoc;     //created elsewhere
    Document weather = getWeather(latitude, longitude);
    Element weatherRoot = weather.getDocumentElement();

    Node root = xmlDoc.getDocumentElement();
    Node adopt = weather.adoptNode(weatherRoot);
    Node imported = weather.importNode(weatherRoot, true);
    Node child = root.getFirstChild();

    root.replaceChild(adopt, child);      //initially tried replacing the <blank/> elements
    root.replaceChild(imported, child);

    root.appendChild(adopt);
    root.appendChild(imported);
    root.appendChild(adopt.cloneNode(true));

所有这些都会引发DOMException:WRONG_DOCUMENT_ERR:与创建节点的节点不同,该节点在其他文档中使用。

我想我将不得不弄清楚如何使用stax或只是重新阅读文档并创建新元素…不过,仅仅合并文档似乎有点太多的工作。


问题答案:

这有点棘手,但可以运行以下示例:

public static void main(String[] args) {

    DocumentImpl doc1 = new DocumentImpl();
    Element root1 = doc1.createElement("root1");
    Element node1 = doc1.createElement("node1");
    doc1.appendChild(root1);
    root1.appendChild(node1);

    DocumentImpl doc2 = new DocumentImpl();
    Element root2 = doc2.createElement("root2");
    Element node2 = doc2.createElement("node2");
    doc2.appendChild(root2);
    root2.appendChild(node2);

    DocumentImpl doc3 = new DocumentImpl();
    Element root3 = doc3.createElement("root3");
    doc3.appendChild(root3);

    // root3.appendChild(root1); // Doesn't work -> DOMException
    root3.appendChild(doc3.importNode(root1, true));

    // root3.appendChild(root2); // Doesn't work -> DOMException
    root3.appendChild(doc3.importNode(root2, true));   
}


 类似资料:
  • 我有一个问题,我需要将文件附加到媒体库中的文档。 开箱即用Kentico似乎只允许在附件部分和相关文档上直接上传,您只能在网站上关联其他内容/文档。 我希望能够将文件作为相关文档或媒体库的附件附加。 我在网上找这个,但我什么也找不到。 我目前的计划是在“添加相关媒体文件”中添加一个自定义部分,但如果有更简单的方法,那就太好了。 为了澄清这一点,我需要能够将多个媒体文件添加到一个文档中。 当做

  • XML(可扩展标记语言)是一种非常流行的简单基于文本的语言,可用作不同应用程序之间的通信模式。 它被认为是传输和存储数据的标准方法。

  • 问题内容: 我想用Java创建一个tar归档文件。我有不断创建的文件,我希望工作线程从队列中引用这些文件并将其复制到存档中。 我尝试使用Apache Compression库的TarArchiveOutputStream来执行此操作,但是我不希望在程序的整个过程中都保持归档处于打开状态(因为除非最终确定归档文件,否则它可能会损坏- 因此,我宁愿将其追加到批处理),而我还没有找到一种很好的方法来通过

  • 问题内容: 如我所见,java mongo驱动程序不提供从现有gridFS文件获取的功能 我必须直接创建或使用方法。 是否缺少Java驱动程序或gridfs的限制? 除了创建新文件/删除旧文件之外,您能否建议其他解决方法? 谢谢 问题答案: GridFS不是MongoDB的核心功能,而是存储带有随附元数据的二进制数据的约定。您应该能够以通常的方式修改集合中的任何文档,同时保持相应文档的完整性。主要

  • 有没有办法将文件附加到MS Word文档中?我的意思与您将MS Excel文件拖放到MS Word中的方式相同。它显示MS Excel图标和文件名,双击打开附件。 我的情况来自以前的html文件,我导入使用XHTMLImporter.convert.现在超文本标记语言引用附件下载几个地方,并希望将这些文件附加到适当的MS Word文档。

  • 问题内容: 如何在Go中将文件附加到现有的tar存档中?我没有在文档中看到任何明显的方法。 我有一个已经创建的tar文件,在关闭它之后,我想向它添加更多文件。 编辑 更改文档中的示例并遵循给出的答案,我仍然没有得到预期的结果。前三个文件正在写入tar,但是当我再次关闭并打开文件以对其进行写入时,永远不会写入新文件。代码运行正常。我不知道我在想什么。 以下代码为我提供了一个tar文件,其中包含三个文