通过Java替换XML节点

Ond*_*lar 4 java xml

我想用另一个节点替换XML文档中的节点,结果用其他内容替换它的所有子节点.以下代码应该可行,但由于未知原因,它不会.

File xmlFile = new File("c:\\file.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(xmlFile);
doc.getDocumentElement().normalize();

NodeList nodes = doc.getElementsByTagName("NodeToReplace");
for (int i = 0; i < nodes.getLength(); i++) {

    NodeList children = nodes.item(i).getChildNodes();
    for (int j = 0; j < children.getLength(); j++) {
          nodes.item(i).removeChild(children.item(j));
    }
        doc.renameNode(nodes.item(i), null, "MyCustomTag");  
}
Run Code Online (Sandbox Code Playgroud)

编辑-

经过一段时间的调试后,我解决了它.问题在于移动子阵列elmts的索引.这是代码:

NodeList nodes = doc.getElementsByTagName("NodeToReplace");
for (int i = 0; i < nodes.getLength(); i++) {

    NodeList children = nodes.item(i).getChildNodes();

    int len = children.getLength();
    for (int j = len-1; j >= 0; j--) {
        nodes.item(i).removeChild((Node) children.item(j));
    }
    doc.renameNode(nodes.item(i), null, "MyCustomTag");  
}
Run Code Online (Sandbox Code Playgroud)

Tho*_*4no 8

尝试使用replaceChild立即执行整个层次结构:

NodeList nodes = doc.getElementsByTagName("NodeToReplace");
for (int i = 0; i < nodes.getLength(); i++) {
    Node node = nodes.item(i);
    Node newNode = // Create your new node here.
    node.getParentNode().replaceChild(newNode, node);
}
Run Code Online (Sandbox Code Playgroud)

  • 有几种方法,您可能希望使用doc.createTextNode(String)来创建模板节点,然后为每个newNode克隆该模板节点. (2认同)