如何覆盖根元素

时间:2012-01-22 20:50:38

标签: java xml dom

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

document.removeChild(document.getDocumentElement());

然后这个:

newElement = document.getDocumentElement();
newElement = document.createElement("newRootElementName");
document.appendChild(newElement);

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

1 个答案:

答案 0 :(得分:4)

继续我找到here的例子,这是你如何做到的。由于显然没有方法可以更改元素的名称,因此您必须执行以下操作:

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

    // 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);