如何在Java中从xml文件中删除元素 2. 马克斯 狗 13 5. 登策尔 老鼠 54 7. 小狗 蛇 5.
这是我的xml代码如何在Java中从xml文件中删除元素 2. 马克斯 狗 13 5. 登策尔 老鼠 54 7. 小狗 蛇 5.,java,xml,Java,Xml,这是我的xml代码 <?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&
<?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>
public void removePet(int-petId)抛出IllegalArgumentException{
NodeList pets=xmlDoc.getElementsByTagName(“Pet”);//Pet节点的子节点列表
int numPets=pets.getLength();
for(int i=0;i
然后,我的java函数用于删除Pet元素,但是在if语句上抛出了null指针异常,并且没有删除节点。不确定需要执行哪些操作才能从该点正确移除该元素。中断暂时解决了这个问题,但在另一个功能中删除所有Pet元素,此中断允许删除一个元素。我知道那是因为休息。现在,尝试找出如何在不中断的情况下完成这两个删除操作,删除节点列表中的节点将导致节点列表更新。此时,您尝试访问的最后一个节点在您期望的索引处不存在。尝试保留一组要更新的目标,然后删除它们:
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();
}
}
Set targetElements=new HashSet();
int numPets=pets.getLength();
for(int i=0;i
您还需要在删除所有宠物元素的方法中应用此技术
见:
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);
}