2010-09-27 61 views
0

我正在編寫一個應用程序,它必須根據目錄中的一組文件更新已存在的xml文件的各個部分。此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)??

任何有關這種任務的好方法的建議?

回答

1

如果有一個機會,你的XML配置可能是顯著的大小,那麼它是真的不好用基於DOM方法[先走,由於相關加載大型XML文檔的內存佔用空間]

你應該看看StaX。它具有高度優化的解析和編寫XML文檔的方法。

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);