gpt4 book ai didi

java - 如何用Java从xml文件中删除元素

转载 作者:行者123 更新时间:2023-12-02 11:43:08 25 4
gpt4 key购买 nike

 <?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 元素,此中断允许删除一个元素。我知道那是由于休息造成的。现在试图弄清楚如何在不中断的情况下完成这两个删除

最佳答案

删除 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);
}

您还需要在删除所有宠物元素的方法中应用此技术。

参见:Removing DOM nodes when traversing a NodeList

关于java - 如何用Java从xml文件中删除元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48389788/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com