日期:2014-05-19  浏览次数:20652 次

Dom4j修改XML文件遇到一个比较纠结的问题,求大神。
这是我修改XML文件的函数问题在下面
Java code

       /**
     * 修改XMl文件指定节点的值
     * 
     * @param xmlPath
     *            Xml文件路径
     * @param CNode
     *            判断节点
     * @param CValue
     *            判断节点值
     * @param Node
     *            修改节点
     * @param newValue
     *            修改值
     */
    public boolean modifyXml(String xmlPath, String CNode, String CValue,
            String Node, String newValue) {
        SAXReader reader = new SAXReader();
        boolean flag = false;
        try {
            Document doc = reader.read(this.getClass().getClassLoader()
                    .getResourceAsStream(xmlPath));
            Element root = doc.getRootElement();
            List<Element> nodes = root.elements();
            for (Element node : nodes) {
                List<Element> nodes2 = node.elements();
                for (Element node2 : nodes2) {
                    if (node2.getName().equals(CNode)
                            && node2.getData().toString().equals(CValue)) {
                        for (Element node3 : nodes2) {
                            if (node3.getName().equals(Node)) {
                                node3.setText(newValue);
                                flag = true;
                                break;
                            }
                        }
                        break;
                    }
                }
            }
            FileWriter fw = new FileWriter(this.getClass().getClassLoader()
                    .getResource(xmlPath).getPath());
            XMLWriter writer = new XMLWriter(fw);
            writer.write(doc);
            fw.close();
            writer.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return flag;
    }



当我多次修改的时候发现todayLastSendTime并没有修改成功,单步调试的时候是成功了,但是修改todaySendCount的同时又把todayLastSendTime修改成原来的。我是在tomcat下运行,但是我用junit测试的时候没有这个问题。
Java code

modifyXml("MessageUsers.xml", "name", name,"todayLastSendTime",todayLastSendTimeStr);
modifyXml("MessageUsers.xml", "name", name,"todaySendCount", todaySendCount + "");



------解决方案--------------------

应该是在第二次修改todaySendCount时,传进来的doc里todayLastSendTime的值还是改之前的值吧。
modifyXml方法只是修改一个结点的值,不牵扯到改上次的值啊。调试一下,第二次修改todaySendCount时,一进来,里面todayLastSendTime的值是不是已经是改之前的了?
应该是在执行modifyXml方法前,todayLastSendTime的值读到的就有问题。