J'ai un document XML existant avec des nœuds optionnels et je veux insérer un nouveau nœud, mais à un certain endroit.Insérer un nœud XML à une position spécifique d'un document existant
Le document ressemble à ceci:
<root>
<a>...</a>
...
<r>...</r>
<t>...</t>
...
<z>...</z>
</root>
Le nouveau nœud (<s>...</s>
) doit être inséré entre le noeud <r>
et <t>
, entraînant:
<root>
<a>...</a>
...
<r>...</r>
<s>new node</s>
<t>...</t>
...
<z>...</z>
</root>
Le problème est que l'actuel les noeuds sont optionnels. Par conséquent, je ne peux pas utiliser XPath pour trouver le nœud <r>
et insérer le nouveau nœud après celui-ci.
Je voudrais éviter la "méthode de la force brute": Recherche de <r>
jusqu'à <a>
pour trouver un nœud qui existe. Je souhaite également préserver l'ordre, car le document XML doit être conforme à un schéma XML.
XSLT ainsi que les bibliothèques XML normales peuvent être utilisées, mais comme j'utilise uniquement Saxon-B, le traitement XSLT basé sur le schéma n'est pas une option.
Est-ce que quelqu'un a une idée sur la façon d'insérer un tel noeud?
thx, MyKey_
Cela ne fonctionne pas quand il n'y a pas de nœud 'r' (selon la question initiale: tous les nœuds sont facultatifs). À quoi ressemblerait le modèle lorsque vous ne pouvez pas compter sur un noeud pour exister? –
Oops, vous avez raison. J'avais mal lu le message original. Maintenant, j'ai complètement remplacé la réponse. Merci. –
C'est vraiment cool. Léger raffinement: en dérivant $ elments-after, utilisez une variable au lieu de 's', donc vous pouvez gérer automatiquement l'insertion après un enfant de. –
13ren