Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.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 removeChild不工作?_Java_Xml_Dom - Fatal编程技术网

Java XML removeChild不工作?

Java XML removeChild不工作?,java,xml,dom,Java,Xml,Dom,您好,我已经查找了很多这个问题,但我找不到有效的解决方案。我基本上是要删除“job”节点,如第7行中声明的和第13行中删除的。存在0个运行时错误,但未删除节点 NodeList rootNodes = xml.getElementsByTagName("jobs"); Node rootNode = rootNodes.item(0); Element rootElement = (Element) rootNode; NodeList jobsL

您好,我已经查找了很多这个问题,但我找不到有效的解决方案。我基本上是要删除“job”节点,如第7行中声明的和第13行中删除的。存在0个运行时错误,但未删除节点

NodeList rootNodes = xml.getElementsByTagName("jobs");
        Node rootNode = rootNodes.item(0);
        Element rootElement = (Element) rootNode;
        NodeList jobsList = rootElement.getElementsByTagName("job");

        for (int i = 0; i < jobsList.getLength(); i++) {
            Node job = jobsList.item(i);
            Element jobElement = (Element) job;

            if(jobElement.getAttribute("id").equals(
            msgEvent.getMessage().getContentRaw().split(" ")[2]))
            {
                rootNode.removeChild(job);
                msgEvent.getChannel().sendMessage("Removed Job " + jobElement.getAttribute("id") + " (Summary: '" + jobElement.getAttribute("summary") + "')").complete();
            }
        }
nodelistrootnodes=xml.getElementsByTagName(“作业”);
节点rootNode=rootNodes.item(0);
元素rootElement=(元素)rootNode;
NodeList jobsList=rootElement.getElementsByTagName(“作业”);
对于(int i=0;i
这里是XML

<?xml version = "1.0"?>
<jobs>
    <job payment = "50000" poster="171048434529337344" collect = "asdf" id = "1" summary="asdfd" expires="5/10/18"> </job>
    <job payment = "10000" poster="171048434529337344" collect = "asdf" id = "2" summary="asdf" expires="5/10/18"> </job>
</jobs>

由于这太大,无法评论,下面是我的测试代码和结果:

public static void main(String[] args) {
    try (InputStream is = Files.newInputStream(Paths.get("C://Temp/xx.xml"))) {
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();
        Document xml = builder.parse(new InputSource(is));

        NodeList rootNodes = xml.getElementsByTagName("jobs");
        Node rootNode = rootNodes.item(0);
        Element rootElement = (Element) rootNode;
        NodeList jobsList = rootElement.getElementsByTagName("job");

        System.out.println("list before removal");
        for (int i = 0; i < jobsList.getLength(); i++) {
            Node job = jobsList.item(i);
            Element jobElement = (Element) job;
            System.out.println(jobElement.getAttribute("id"));
        }

        for (int i = 0; i < jobsList.getLength(); i++) {
            Node job = jobsList.item(i);
            Element jobElement = (Element) job;

            if (jobElement.getAttribute("id").equals("1")) {
                rootNode.removeChild(job);
            }
        }

        System.out.println("list after removal");
        jobsList = rootElement.getElementsByTagName("job");
        for (int i = 0; i < jobsList.getLength(); i++) {
            Node job = jobsList.item(i);
            Element jobElement = (Element) job;
            System.out.println(jobElement.getAttribute("id"));
        }

    } catch (Exception e) {
        e.printStackTrace();
    }
}

您如何知道节点没有被删除?我尝试了你的代码,但节点确实被删除了。当然,也就是说,如果
msgEvent
包含列表中的id,那么我可以肯定if语句确实通过了,因为sendMessage发生了。但是,它实际上似乎并没有从运行时或XML文件中删除节点。您是否将XML写回该文件?删除操作仅在内存中进行
list before removal
1
2
list after removal
2