<?xml version="1.0" encoding="UTF-8" standalone="no"?><PetStore xmlns="http://www.training.mo.gov/PetStore">
<Pet>
<ID_Number>2</ID_Number>
<Name>Max</Name>
<Type>Dog</Type>
<Age>13</Age>
</Pet>
<Pet>
<ID_Number>5</ID_Number>
<Name>Denzel</Name>
<Type>Rat</Type>
<Age>54</Age>
</Pet>
<Pet>
<ID_Number>7</ID_Number>
<Name>Pooch</Name>
<Type>Snake</Type>
<Age>5</Age>
</Pet>
</PetStore>
这是我的xml代码
public void removePet(int petId) throws IllegalArgumentException {
NodeList pets = xmlDoc.getElementsByTagName("Pet"); // List of the Pet node's child nodes
int numPets = pets.getLength();
for (int i = 0; i < numPets; i++) {
Node nNode = pets.item(i);
Element petElement = (Element) nNode;
if (petId == Integer.parseInt(petElement.getElementsByTagName("ID_Number").item(0).getTextContent())){
nNode.getParentNode().removeChild(nNode);
//break;
}
}
try {
transform(xmlDoc);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
然后我的java函数用于删除Pet元素,但是在我的if语句中抛出了空指针异常,并且未删除该节点。不确定从这一点正确删除元素需要做什么。中断暂时解决了这个问题,但是在另一个函数中删除所有Pet元素,这个中断允许删除一个元素。我知道这是因为休息。现在试图找出如何完成两个删除没有休息
答案 0 :(得分:0)
删除NodeList中的节点将导致NodeList更新。此时,您尝试访问的最后一个节点在您期望的索引处不存在。尝试保留一组要更新的目标,然后将其删除:
Set<Element> targetElements = new HashSet<Element>();
int numPets = pets.getLength();
for (int i = 0; i < numPets; i++) {
Node nNode = pets.item(i);
Element petElement = (Element) nNode;
if (5 == Integer.parseInt(petElement.getElementsByTagName("ID_Number").item(0).getTextContent())){
targetElements.add(petElement);
}
}
for (Element e: targetElements) {
e.getParentNode().removeChild(e);
}
您还需要在删除所有宠物元素的方法中应用此技术。