I have the following xml
<Root>
<Page>
<Object ref="a"></Object>
<Object ref="b"></Object>
</Page>
</Root>
I want to convert into
<Root>
<Page>
<ObjectGroup ref="a">
<Object ref="a"/>
</ObjectGroup>
<ObjectGroup ref="b">
<Object ref="b"/>
</ObjectGroup>
</Page>
</Root>
Basically I want to introduce a new parent node. I used the below way but it's introducing more parents
private static void loadRoots(String xMLPath) {
Document doc = Migrate.initTreeOpFromString(xMLPath);
Element rootElement = doc.getDocumentElement();
loadPage(rootElement);
Migrate.finishTreeOp(doc, "D:\\a.xml");
}
private static void loadPage(Element root) {
NodeList pageNodes = root.getChildNodes();
for (int j = 0; j < pageNodes.getLength(); j++) {
Node pageNode = pageNodes.item(j);
if (pageNode.getNodeType() == Node.ELEMENT_NODE) {
loadObject((Element) pageNode);
}
}
}
private static void loadObject(Element pageNode) {
NodeList objectNodes = pageNode.getChildNodes();
for (int j = 0; j < objectNodes.getLength(); j++) {
Node objectNode = objectNodes.item(j);
if (objectNode.getNodeType() == Node.ELEMENT_NODE) {
Element objGroup = pageNode.getOwnerDocument().createElement("ObjectGroup");
String ref = objectNode.getAttributes().getNamedItem("ref").getTextContent();
objGroup.setAttribute("ref", ref);
pageNode.removeChild(objectNode);
objGroup.appendChild(objectNode);
pageNode.appendChild(objGroup);
}
}
}
But the output for this is
<Root>
<Page>
<ObjectGroup ref="b">
<Object ref="b"/>
</ObjectGroup>
<ObjectGroup ref="a">
<ObjectGroup ref="a">
<ObjectGroup ref="a">
<Object ref="a"/>
</ObjectGroup>
</ObjectGroup>
</ObjectGroup>
</Page>
</Root>
which is not what I wanted. How do I solve this
It's my mistake.I should have used insertBefore. That did the trick
private static void loadObject(Element pageNode) {
NodeList objectNodes = pageNode.getChildNodes();
for (int j = 0; j < objectNodes.getLength(); j++) {
Node objectNode = objectNodes.item(j);
if (objectNode.getNodeType() == Node.ELEMENT_NODE) {
Element objGroup = pageNode.getOwnerDocument().createElement("ObjectGroup");
String ref = objectNode.getAttributes().getNamedItem("ref").getTextContent();
objGroup.setAttribute("ref", ref);
pageNode.insertBefore(objGroup, objectNode);
objGroup.appendChild(objectNode);
}
}
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.