在程序中我对XML文档进行修改(xml文档存在,我想在文档中加一个元素),代码如下:
public class DomTest {

DocumentBuilderFactory factory = null;
DocumentBuilder builder = null;
Document document = null;
File f = null; public static void main(String[] arg)
{
   try
            {
                f = new File(arg[0]);  //外部XML文件 
       builder = factory.newDocumentBuilder();
       document = builder.parse(f);
       //创建一个新的元素
       Element e = document.createElement("aaaaaaaa");
                //添加到XML文件中
       document.getDocumentElement().appendChild(e);
            }
            catch(Exception)
            {}
}
}
程序执行正常,没有报错,但是当我打开XML文件时,却发现XML文件的内容没有发生变化,创建的新元素没有添加到XML文件中去。这是什么原因,请各位高手指点。
用JAVA对XML文件进行修改后是不是还要保存吗?

解决方案 »

  1.   

    你没有将操作后的document写入到文件输出流中,所以只是document文档模型变化了,而文件没有变化。
      

  2.   

    /**
       * 将xml文档写入到输出流
       * @param document Document 要操作的文档
       * @param os OutputStream 要写入的输出流
       * @throws XmlOperationException 抛出自定义的xml操作异常
       */
      public static void writeXmlDocumentToOutputStream(Document document,
          OutputStream os) throws XmlOperationException {    if (document == null) {
          LogUtil.log("[XML] 将document写入输出流时发生异常,document为空。" +
                      "在XMLUtil方法writeXmlDocumentToOutputStream方法中。",
                      LogLevel.ERROR);
          throw new XmlOperationException(
              "将document写入输出流时发生异常,document为空。" +
              "在XMLUtil方法writeXmlDocumentToOutputStream方法中。");
        }
        if (os == null) {
          LogUtil.log("[XML] 将document写入输出流时发生异常,OutputStream为空。" +
                      "在XMLUtil方法writeXmlDocumentToOutputStream方法中。",
                      LogLevel.ERROR);
          throw new XmlOperationException(
              "将document写入输出流时发生异常,OutputStream为空。" +
              "在XMLUtil方法writeXmlDocumentToOutputStream方法中。");
        }    // if(document instanceof XmlDocument) {
        // Crimson writer
        // XmlDocument xdoc = (XmlDocument) document;
        // xdoc.write(os);
        // }
        // else {
        // Xerces writer
        OutputFormat format = new OutputFormat(document);
        format.setIndent(2);    try {      XMLSerializer serializer = new XMLSerializer(os, format);
          serializer.asDOMSerializer();
          serializer.serialize(document.getDocumentElement());    }
        catch (java.io.IOException e) {      e.printStackTrace();      LogUtil.log("[XML] 将document写入输出流时发生IO异常。" +
                      "在XMLUtil方法writeXmlDocumentToOutputStream方法中。异常信息:" +
                      e.getMessage(),
                      LogLevel.ERROR);
          throw new XmlOperationException(
              "将document写入输出流时发生IO异常。" +
              "在XMLUtil方法writeXmlDocumentToOutputStream方法中。", e);    }
        // }
      }用这个方法就可以了。
    writeXmlDocumentToOutputStream(document,new FileOutputStream(new File("文件输出路径")));