XML Update

La mise à jour d'un fichier XML source consiste à :

Ceci nécéssite de :

  • définir un modèle de type xml dans le component. Cette définition permet d'indiquer au component le fichier XML source à modifier. La défintion de ce modèle forcera ensuite l'utilisateur qui ouvre ce component à selectionner le fichier XML à modifier :
      <models>
            <model key="struts" type="xml" />
      </models>
  • définir à travers la défintion file le fragment XML à insérer dans le fichier XML source qui a été définit dans le modèle de type xml :
    • l'endroit ou le fragment XML doit être inséré, qui est effectué par XPath.
    • le template à utiliser pour la génération de ce fragment XML.
      <output>
        <file key="struts" >
            <insert path="/struts/package/action[last()]" position="after" >
                    <template uri="/ftl/struts2/struts.xml/action.ftl" />
            </insert>
        </file>
      </output>

    Pour indiquer le fichier XML source à modifier (qui a été définit dans le modèle), l'attribut key de l'élement file doit faire référence à l'attribut key de l'élement model.

  • écrire le template qui retourne le fragment XML :
    <action name="${actionName}" 
                    class="${actionClassName}">
      <#if resultType != '' >
      <result type="${resultType}" />
      </#if>
    </action>  

model

La définition d'un modèle de type xml et de key xmlFileToUpdate qui permet d'indiquer le fichier XML à mettre à jour s'effectue comme ceci :

...
<models>
  <model type="xml" key="xmlFileToUpdate"  />
  ...
</models>
...

file

L'élement file est contenu dans l'élement output. Il permet de décrire la mise à jour à effectuer sur le fichier XML source qui a été définit dans le modèle. La mise à jour du fichier XML définit dans le modèle de key xmlFileToUpdate s'effectue comme ceci :

...
<output>
    <file key="xmlFileToUpdate" >
        ...
    </file>
  </output>
...

insert

L'élement insert est contenu dans l'élement file. Il permet d'insérer un fragment XML :

  • à un endroit du fichier source XML. Cet endroit est défini à l'aide des attributs path et position.
  • qui est généré par un template.
...
  <file key="xmlFileToUpdate" >
    <insert path="..." position="..." >
      <template uri="..." />
    </insert>
  </file>
...

path & position

Pour indiquer l'endroit précis ou le fragment XML généré par un template doit être insérer, vous devez utiliser les attributs :

  • path qui est une expression valide XPath qui doit faire référence à un noeud du fichier source XML.
  • position qui permet d'indiquer par rapport au noeud retrouvé par path d'insérer le fragment XML :
    • avant ce noeud avec position=before.
    • à l'intérieur du noeud avec position=inside.
    • après ce noeud avec position=after.

template

Le fragment XML à insérer est généré. Cette génération de ce fragment s'effectue à partir d'un template (Freemarker, velocity, XSL,...).

Pour générer un fragment XML à l'aide du template path_of_myTemplate, insert doit contenir :

...
<insert path="..." position="..." >
  <template uri="path_of_myTemplate" />
</insert>
...