2010-09-27 6 views
0

J'écris une application qui doit mettre à jour des parties d'un fichier xml déjà existant basé sur un ensemble de fichiers dans un répertoire. Un exemple de ce fichier xml peut être vu ci-dessous:Ajouter des nœuds à un fichier XML lors de l'exécution?

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

Dans le cadre ci-dessous une liste de fichiers est ajouté et son spécifié si elles doivent être « analysable » (utilisé pour la substitution des paramètres):

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

Maintenant, le nombre de fichiers qui doivent être ajoutés à cette portée peut changer chaque fois que l'application est exécutée. Pour que cela soit possible, j'ai considéré l'approche suivante:

1) Lire tout le XML dans un org.w3c.dom. *; Documentez et ajoutez des nœuds basés sur le résultat de la lecture du répertoire.

2) Ajoutez d'une manière ou d'une autre le contenu d'un fichier .properties à la portée. De cette façon, il est possible de mettre à jour la liste de fichiers sans recompiler le code.

3) ??

Des suggestions sur une bonne approche pour ce genre de tâche?

Répondre

1

s'il y a une chance que votre configuration XML pourrait être de taille importante, il est vraiment pas bon d'aller de l'avant avec une approche basée sur les DOM [en raison du associé empreinte de mémoire de chargement d'un document XML volumineux]

vous devriez jeter un oeil à StaX. il a une approche hautement optimisée pour l'analyse et l'écriture de documents XML.

1

3) Remplacez l'ancien fichier par votre nouvelle version modifiée. Les analyseurs DOM conservent les commentaires intacts, mais vous pourriez vous retrouver avec des différences de formatage. Pour écrire dans un fichier, faites:

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