2016-06-29 10 views
0

Ich habe das folgende XML-Java XML Legen Sie einen übergeordneten Knoten

<Root> 
    <Page> 
     <Object ref="a"></Object> 
     <Object ref="b"></Object> 
    </Page> 
</Root> 

ich in

<Root> 
    <Page> 
     <ObjectGroup ref="a"> 
      <Object ref="a"/> 
     </ObjectGroup> 
     <ObjectGroup ref="b"> 
      <Object ref="b"/> 
     </ObjectGroup> 
    </Page> 
</Root> 

konvertieren möchten Grundsätzlich ich einen neuen übergeordneten Knoten einführen wollen. Früher habe ich die unten Art und Weise, aber es ist mehr Eltern

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

Einführung Aber der Ausgang hierfür ist

<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> 

das ist nicht das, was ich wollte. Wie löse ich das

+0

Ich würde XSLT verwenden. Sie könnten eine Vorlage für dieses Wrapping definieren. – Fildor

+0

@Fildor danke, aber ich habe die Lösung – Madhan

+0

Wenn Sie JAXB verwendet haben, wäre Ihr Leben so viel einfacher. – Teddy

Antwort

0

Es ist mein Fehler. Ich hätte insertBefore verwendet werden sollen. Das hat den 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); 
      } 
     } 
    } 
Verwandte Themen