我正在编写一个应用程序,它必须根据目录中的一组文件更新已存在的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)??
有关这种任务的良好方法的任何建议吗?
答案 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文档。