我在一个应用中,需要在页面上定时调用固定位置的data.xml数据(2k),然后在调用之前会调用服务器端的程序,让根据数据库中最新的数据更新data.xml、
现在使用jdom来操作,FileInputStream和FileOutputStream使用同一源地址(data.xml)。
先读取指定节点数据,然后更改节点数据,最后用XMLOutputter来存新数据。
使用过程中,发现,没调用一次它都是先把data.xml的内容清空(0k),然后再写入进去,这样页面上就只能获得空的节点数据了。有没有办法让他只更新部分数据,或者保证里面一直有数据供页面使用???
现在使用jdom来操作,FileInputStream和FileOutputStream使用同一源地址(data.xml)。
先读取指定节点数据,然后更改节点数据,最后用XMLOutputter来存新数据。
使用过程中,发现,没调用一次它都是先把data.xml的内容清空(0k),然后再写入进去,这样页面上就只能获得空的节点数据了。有没有办法让他只更新部分数据,或者保证里面一直有数据供页面使用???
给你一个例子吧
<?xml version="1.0" encoding="GB2312"?> <?xml-stylesheet type="text/xsl" href="students.xsl"?><students>
<student sn="01">
<name>张三</name>
<age>18</age>
</student>
<student sn="02">
<name>李四</name>
<age>20</age>
</student>
</students>jdom转换的代码
import java.io.File;
import java.io.IOException;import org.jdom.*;
import org.jdom.input.SAXBuilder;
import org.jdom.output.XMLOutputter;
import org.jdom.output.Format;public class JDOMConvert
{
public static void main(String[] args)
{
SAXBuilder saxBuilder=new SAXBuilder();
File file=new File("students.xml");
try
{
Document doc=saxBuilder.build(file);
//------------------添加节点------------------
//创建表示一个学生信息的各元素节点
Element eltStu=new Element("student");
Element eltName=new Element("name");
Element eltAge=new Element("age");
//设置<name>和<age>元素的文本内容
eltName.setText("王五");
eltAge.setText("19");
//将<name>和<age>元素添加为<student>元素的内容
eltStu.addContent(eltName);
eltStu.addContent(eltAge);
//为<student>元素设置属性sn,值为03
eltStu.setAttribute("sn","03");
Element root=doc.getRootElement();
root.addContent(eltStu);
//------------------删除节点------------------
root.removeChild("student");
//------------------修改节点------------------
root.getChild("student").getChild("age").setText("22");
//Format fmt=Format.getRawFormat();
XMLOutputter xmlOut=new XMLOutputter();
Format fmt=Format.getPrettyFormat();
fmt.setEncoding("GBK");
fmt.setIndent(" ");
xmlOut.setFormat(fmt);
xmlOut.output(doc,System.out);
}
catch(IOException e){System.out.println(e.getMessage());}
catch(JDOMException e){System.out.println(e.getMessage());}
}
}
我需要的又写回students.xml,不是打印在Console里面。至于写回我也
XMLOutputter output = new XMLOutputter(format);
fo = new FileOutputStream(url);
output.output(doc,fo);
写回去了。主要的现象是在中间操作的时候,会把整个students.xml的内容清除了,变成空。
然后再一个一个的又重新写回去。我需要的时候 “怎么让他不清空原来的数据,只是把个别element的内容改一下”
是不是修改后的输出也是正确的?
你想让他不清空原来的数据,只是把个别element的内容改一下,这个只怕是不是太好实现,因为,jdom的语法规则就是一次读取完,输出的话一次输出完
如果你想只修改个别节点,用dom4j会好一点
比如<?xml version="1.0" encoding="utf-8"?>
<dataList>
<data><item>test</item></data>
</dataList>
总是出现<?xml version="1.0" encoding="utf-8"?>
<dataList>
<data><item>test</item></data>
</dataList>>或者<?xml version="1.0" encoding="utf-8"?>
<dataList>
<data><item>test</item></data>
</dataList>dataList>就是最后总会多出一些数据来。
http://topic.csdn.net/u/20071210/11/ff8c8be6-c88c-4647-9525-11e5debd62f1.html