如何覆盖根元素

tra*_*ega 3 java xml dom

我遇到了一个场景,在其他地方创建根(w3c dom)文档元素后,我需要用新元素覆盖它。到目前为止,我已经尝试了两种不同的方法来实现这一目标:

document.removeChild(document.getDocumentElement());
Run Code Online (Sandbox Code Playgroud)

随后是这样的:

newElement = document.getDocumentElement();
newElement = document.createElement("newRootElementName");
document.appendChild(newElement);
Run Code Online (Sandbox Code Playgroud)

两者似乎都没有覆盖根元素,并且保存后,文档似乎只包含空的根元素。

Mar*_*nto 6

按照我在这里找到的示例,您可以这样做。由于显然没有方法可以更改元素的名称,因此您必须执行以下操作:

  1. 使用新名称创建另一个元素
  2. 复制旧元素的属性
  3. 复制旧元素的子元素
  4. 最后更换节点。

例如:

// Obtain the root element
Element element = document.getDocumentElement();

// Create an element with the new name
Element element2 = document.createElement("newRootElementName");

// Copy the attributes to the new element
NamedNodeMap attrs = element.getAttributes();
for (int i=0; i<attrs.getLength(); i++) {
  Attr attr2 = (Attr)document.importNode(attrs.item(i), true);
  element2.getAttributes().setNamedItem(attr2);
 }

// Move all the children
while (element.hasChildNodes()) {
  element2.appendChild(element.getFirstChild());
 }

// Replace the old node with the new node
element.getParentNode().replaceChild(element2, element);
Run Code Online (Sandbox Code Playgroud)