我想用另一个节点替换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");
}
编辑 -
经过一段时间的调试后,我解决了它。问题在于移动子阵列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");
}
答案 0 :(得分: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);
}
答案 1 :(得分:0)
简单的方法是使用正则表达式。
String payload= payload.replaceAll("<payload>([^<]*)</payload>", "<payload>NODATA</payload>");
这将确保所有有效负载节点的内容都被NODATA取代