iteye_6151 2012-05-14 10:00
浏览 283
已采纳

dom4j读写xml的奇怪问题

package util;

import bean.RecentContent;
import java.io.FileWriter;
import java.io.InputStream;
import java.net.URL;
import java.util.ArrayList;
import java.util.Iterator;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

public class RecentContentDao
{
private String filePath = "../data/RecentContent.xml";

public ArrayList selectAll()
{
ArrayList rcArrayList = new ArrayList();
try {
SAXReader reader = new SAXReader();
InputStream file = super.getClass().getResourceAsStream(this.filePath);
Document document = reader.read(file);
Element root = document.getRootElement();
for (Iterator i = root.elementIterator("内容"); i.hasNext(); ) {
Element content = (Element)i.next();
RecentContent rc = new RecentContent();
rc.setCid(content.elementText("编号"));
rc.setTitle(content.elementText("标题"));
rc.setDetail(content.elementText("详细"));
rc.setDate(content.elementText("时间"));
rc.setSample(content.elementText("简介"));
rcArrayList.add(rc);
}
file.close();
} catch (Exception e) {
e.printStackTrace();
}

return rcArrayList;

}

[color=red]public boolean updateContent(String cid, String title, String detail, String date, String sample) {
boolean success = false;
try {
XMLWriter writer = null;
URL url = super.getClass().getResource(this.filePath);
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("GBK");

  SAXReader reader = new SAXReader();
  InputStream file = super.getClass().getResourceAsStream(this.filePath);
  Document document = reader.read(file);
  Element root = document.getRootElement();

  for (Iterator i = root.elementIterator("内容"); i.hasNext(); ) {
    Element content = (Element)i.next();
    if (!(content.attributeValue("cid").equals(cid))) break label216;
    content.selectSingleNode("标题").setText(title);
    content.selectSingleNode("详细").setText(detail);
    content.selectSingleNode("时间").setText(date);
    content.selectSingleNode("简介").setText(sample);
    writer = new XMLWriter(new FileWriter(url.getFile()), format);
    writer.write(document);
    writer.close();
    success = true;
    label216: break;
  }

  file.close();
} catch (Exception e) {
  e.printStackTrace();
}
return success;

}[/color]

public RecentContent selectByCid(String cid) {
RecentContent rc = null;
try {
SAXReader reader = new SAXReader();
InputStream file = super.getClass().getResourceAsStream(this.filePath);
Document document = reader.read(file);
Element root = document.getRootElement();
for (Iterator i = root.elementIterator("内容"); i.hasNext(); ) {
Element content = (Element)i.next();
if (!(content.attributeValue("cid").equals(cid))) break label155;
rc = new RecentContent();
rc.setCid(content.elementText("编号"));
rc.setTitle(content.elementText("标题"));
rc.setDetail(content.elementText("详细"));
rc.setDate(content.elementText("时间"));
label155: rc.setSample(content.elementText("简介"));
}

  file.close();
} catch (Exception e) {
  e.printStackTrace();
}
return rc;

}
}
上面这个代码中红色部分 第一次执行会修改RecentContent.xml 但是第二次执行修改之后会把第一次修改过的内容变回来。。。

  • 写回答

4条回答 默认 最新

  • iteye_7589 2012-05-17 14:55
    关注

    不是说改写不了,是读不到改过的。

    而是说,你改了之后,URL的方式再去读,是硬盘上的。
    getResource方式,是JVM的缓存里的。

    也就是为啥 Freemarker要支持两种模板读取方式classpath和file directory

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 关于大棚监测的pcb板设计
  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器
  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
  • ¥15 Vue3地图和异步函数使用