J'ai été chargé de mettre de l'ordre dans du code XML, donc malgré une DTD assez lâche, tout est déclaré de la même manière. Par exemple, dans les éléments ci-dessousComment déplacer un élément dans XSLT s'il existe
<all>
<e>
<hg>
<hw>things</hw>
<posg><pos value="abc" /></posg>
</hg>
<sg><se1 /></sg>
</e>
<e>
<hg>
<hw>stuff</hw>
<posg><pos value="def" /></posg>
</hg>
<sg>
<se1>
<posg><pos value="ghi" /></posg>
</se1>
</sg>
</e>
</all>
l'élément <posg>
doit être un enfant de <se1>
et non <hg>
. En outre, si un élément <posg>
existe déjà dans l'élément <se1>
, je devrais alors créer un nouvel élément <se1>
en tant que premier enfant de <sg>
, puis déplacer l'élément <posg>
de <hg>
vers le nouvel élément <se1>
.
En effet, alors, les deux éléments ci-dessus devraient ressembler à ceci après transformation
<all>
<e>
<hg>
<hw>things</hw>
</hg>
<sg>
<se1>
<posg><pos value="abc" /></posg>
</se1>
</sg>
</e>
<e>
<hg>
<hw>stuff</hw>
</hg>
<sg>
<se1>
<posg><pos value="def" /></posg>
</se1>
<se1>
<posg><pos value="ghi" /></posg>
</se1>
</sg>
</e>
</all>
Je me bats avec la façon de vérifier si l'élément <posg>
rogue existe dans <hg>
et prendre les mesures appropriées décrites ci-dessus.
Cette solution fonctionne, sauf qu'il ajoutera dans un enfant SE1 supplémentaire pour sg même s'il n'y a pas posg de copier en face de l'élément hg. Comment arrêtez-vous cela ou supprimez l'élément se1 vide généré? – Hmobius
Pas de problème. J'ai enveloppé ' ' avec '' et '' (regardez dans le script). Ainsi, la balise '' n'est générée que s'il y a quelque chose à mettre dedans. –