2016-04-07 12 views
0

こんにちはすべて:)私はJavaとXMLに問題があります。Java XML delete要素> 30の場合

私は様々な年齢のサッカー選手のXMLファイルを持っており、30歳以上のプレーヤーのみを削除したいと考えています。

そして、これは私のJavaソースです:

try { 
     File inputFile = new File("src/players.xml"); 
     DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 
     Document doc = dBuilder.parse(inputFile); 


     System.out.println("Root element :" + doc.getDocumentElement().getNodeName()); 
     NodeList nList = doc.getElementsByTagName("player"); 
     System.out.println("----------------------------"); 


     for (int temp = 0; temp < nList.getLength(); temp++) { 
      Node nNode = nList.item(temp); 
      System.out.println("\nCurrent Element :" + nNode.getNodeName()); 

      if (nNode.getNodeType() == Node.ELEMENT_NODE) {  

       Element eElement = (Element) nNode; 


       int ageNumber = Integer.parseInt(eElement.getElementsByTagName("age").item(0).getTextContent()); 

       if(ageNumber > 30) { 
        temp--; 
        eElement.getParentNode().removeChild(eElement); 
        doc.normalize(); 
        } 

       System.out.println("ID : " + eElement 
        .getElementsByTagName("id") 
        .item(0) 
        .getTextContent()); 

       System.out.println("First Name : " 
         + eElement 
         .getElementsByTagName("firstName") 
         .item(0) 
         .getTextContent()); 

       System.out.println("Last Name : " 
       + eElement 
        .getElementsByTagName("lastName") 
        .item(0) 
        .getTextContent()); 

       System.out.println("Age : " 
       + eElement 
        .getElementsByTagName("age") 
        .item(0) 
        .getTextContent()); 

      } 
     } 
     } catch (Exception e) { 
     e.printStackTrace(); 
     } 
} 

しかし、プログラムは年齢とともに要素を削除does notの> 30

誰もが私を助けてくださいだろうか?事前に感謝します

+1

「doesnt work」とは何を意味しますか?どうしたの?ランタイムの問題?コンパイルの問題? – chrisl08

+0

プログラムはプレーヤーのリストを表示しますが、30歳以上の古いプレーヤーは削除しません。 –

+0

サンプルXMLファイルを提供できますか? –

答えて

0

DOMコレクションはライブであるため、コレクションの反復処理中に要素を削除しようとすると、コレクションの最後から安全に実行されます。 for (int temp = 0; temp < nList.getLength(); temp++) {for (int temp = nList.getLength() - 1; temp >= 0 ; temp--) {に変更してください。

そしてもちろん変更を持って戻ってファイルにシリアル化する必要がdoc文書はあなたがそのためにデフォルトTransformerLSSerializerを使用することができ、持続しました。

関連する問題