Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.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
XML结构javadom中的Delete节点_Java_Xml_Dom - Fatal编程技术网

XML结构javadom中的Delete节点

XML结构javadom中的Delete节点,java,xml,dom,Java,Xml,Dom,我试图从用Java中的DOM解析的XML文件中删除一个节点 private Node deleteChildNode (Node node, String nodeName ) { Node tempNode = null; NodeList nl = node.getChildNodes(); for (int i = 0; i < nl.getLength(); i++) { tempNode = nl.item(i);

我试图从用Java中的DOM解析的XML文件中删除一个节点

private Node deleteChildNode (Node node, String nodeName )
{
    Node tempNode = null;
    NodeList nl = node.getChildNodes();
    for (int i = 0; i < nl.getLength(); i++)
    {
        tempNode = nl.item(i);
        if (tempNode.getNodeName().equals(nodeName))
        {                   
            tempNode= node.removeChild(tempNode);                   
        }        
    }
    return node;
}
但该节点尚未被删除

NodeList nl = nodeClone.getChildNodes();
        for (int i = 0; i < nl.getLength(); i++)
            System.out.println(nl.item(i).getNodeName());
NodeList nl=nodeClone.getChildNodes();
对于(int i=0;i
显示“L123”节点


提前谢谢

如果给定节点下有多个节点具有节点名称,则代码将无法工作,因为您将跳过节点。删除节点时使用节点列表有点棘手。基本上,当您移除子节点时,if会修改节点列表,以便将以下所有节点移回一个索引。(类似于在使用索引遍历列表时从列表中删除元素)。一个简单的修复方法是在删除子节点后添加“-i;”。

如果给定节点下有多个节点具有节点名称,则代码将无法工作,因为您将跳过节点。删除节点时使用节点列表有点棘手。基本上,当您移除子节点时,if会修改节点列表,以便将以下所有节点移回一个索引。(类似于在使用索引遍历列表时从列表中删除元素)。一个简单的修复方法是在删除子节点后添加“-i;”。

我使用这个简单的方法来清除所传递节点的子节点:

public static void clearChildNodes(Node node){
    while(node.hasChildNodes()){
        NodeList nList = node.getChildNodes();
        int index = node.getChildNodes().getLength() - 1;

        Node n = nList.item(index);
        clearChildNodes(n);
        node.removeChild(n);
    }

}

我使用这个简单的方法来清除传递节点的子节点:

public static void clearChildNodes(Node node){
    while(node.hasChildNodes()){
        NodeList nList = node.getChildNodes();
        int index = node.getChildNodes().getLength() - 1;

        Node n = nList.item(index);
        clearChildNodes(n);
        node.removeChild(n);
    }

}

为什么这会有帮助?有一个节点和一个名称。可以找到该节点,并将其存储在“Node.removeChild”之后的“tempNode”中。但其在“节点”中未被删除。这不能依赖于XML文件(因为找到了节点)。它周围一定没有更多的代码。只是搜索要删除的节点。我不能给你更多的代码。我在周五还没有从VersionControl系统中签出更多内容,它可以处理所有xml。为什么这会有帮助?有一个节点和一个名称。可以找到该节点,并将其存储在“Node.removeChild”之后的“tempNode”中。但其在“节点”中未被删除。这不能依赖于XML文件(因为找到了节点)。它周围一定没有更多的代码。只是搜索要删除的节点。我不能给你更多的代码。我在周五没有从VersionControl系统中签出更多内容,它可以处理所有xml。非常感谢。就这样。这个简单的修正非常有效:D我想“投赞成票”。。但我的名声是@Skolleus-既然你问了这个问题,你就不会投票,你会“接受”答案。@Skolleus-而且,在将来,如果你清楚有多个匹配节点,其中一些节点被删除了,而其他节点没有被删除,你的问题可能会得到更快的回答。非常感谢。就这样。这个简单的修正非常有效:D我想“投赞成票”。。但我的名声是@Skolleus——既然你问了这个问题,你就不投赞成票,你就“接受”了答案。@Skolleus——而且,在将来,如果你清楚地知道有多个匹配节点,其中一些节点被删除了,而不是其他节点,你的问题可能会得到更快的回答。