在运行时将节点添加到xml?

时间:2010-09-27 08:14:06

标签: java xml dom

我正在编写一个应用程序,它必须根据目录中的一组文件更新已存在的xml文件的一部分。这个xml文件的一个例子如下所示:

http://izpack.org/documentation/sample-install-definition.html

在下面的范围内,添加了一个文件列表,如果它们应该是“可解析的”(用于参数替换),则指定它们:

  <packs>
    <pack name="Main Application" required="yes" installGroups="New Application" >
          <file src="post-install-tasks.bat" targetdir="$INSTALL_PATH"/>
          <file src="build.xml" targetdir="$INSTALL_PATH"/>
          <parsable targetfile="$INSTALL_PATH/post-install-tasks.bat"/>
          <parsable targetfile="$INSTALL_PATH/build.xml"/>
    </pack>
  </packs>

现在,每次运行应用程序时,必须添加到此作用域的文件数都会发生变化。为了实现这一点,我考虑了以下方法:

1)将整个xml读入org.w3c.dom。*;根据读取目录的结果记录并添加节点。

2)以某种方式将.properties文件中的内容添加到范围。这样就可以在不重新编译代码的情况下更新文件列表。

3)??

有关这种任务的良好方法的任何建议吗?

2 个答案:

答案 0 :(得分:1)

3)使用新的修改版本覆盖旧文件。 DOM解析器保持注释不变,但最终可能会出现格式差异。要写入文件,请执行以下操作:

Source source = new DOMSource(doc);
File file = new File(filename);
Result result = new StreamResult(file); 
Transformer xformer = TransformerFactory.newInstance().newTransformer();
xformer.transform(source, result); 

答案 1 :(得分:1)

如果您的XML配置可能具有相当大的规模,那么继续使用基于DOM的方法[由于加载大型XML文档的相关内存占用空间]确实不好[/ p>

你应该看看StaX。它有一个高度优化的方法来解析和编写XML文档。