2010-09-27 6 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);