2016-06-29 6 views
0

私は、次のXMLJavaのXMLを挿入し、親ノード

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

を持って、私は基本的に私は、新しい親ノードを紹介したい

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

に変換したいです。私は、以下の方法を使用しますが、より多くの親

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

を導入しています。しかし、このため、出力は私が欲しかったものではありません

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

です。この問題を解決するにはどうすればいいですか?

+0

私はXSLTを使用します。ラッピングを行うテンプレートを定義することができます。 – Fildor

+0

@Fildorありがとう、しかし私は解決策を得ました – Madhan

+0

JAXBを使用した場合、人生ははるかに簡単になります。 – Teddy

答えて

0

私の間違いです。私はinsertBeforeを使用していたはずです。それはトリックでした

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); 
      } 
     } 
    } 
関連する問題