Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中从xml文件中删除元素 2. 马克斯 狗 13 5. 登策尔 老鼠 54 7. 小狗 蛇 5._Java_Xml - Fatal编程技术网

如何在Java中从xml文件中删除元素 2. 马克斯 狗 13 5. 登策尔 老鼠 54 7. 小狗 蛇 5.

如何在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代码

 <?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);
    }