Java XML删除元素,如果年龄>三十

时间:2016-04-07 16:14:57

标签: java xml

大家好:)我的Java和XML存在问题。

我有一个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();
      }
}

但该程序不会删除带有年龄的元素&gt; 30。

有人可以帮我吗?提前致谢

1 个答案:

答案 0 :(得分:0)

DOM集合是实时的,因此尝试在迭代集合时删除元素是从集合的末尾安全地完成的。将return更改为for (int temp = 0; temp < nList.getLength(); temp++) {

当然,文档for (int temp = nList.getLength() - 1; temp >= 0 ; temp--) {需要序列化回文件以保持更改,您可以使用默认docTransformer