大家好:)我的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。
有人可以帮我吗?提前致谢
答案 0 :(得分:0)
DOM集合是实时的,因此尝试在迭代集合时删除元素是从集合的末尾安全地完成的。将return
更改为for (int temp = 0; temp < nList.getLength(); temp++) {
。
当然,文档for (int temp = nList.getLength() - 1; temp >= 0 ; temp--) {
需要序列化回文件以保持更改,您可以使用默认doc
或Transformer
。