Merci beaucoup tomlecabron,
effectivement ça correspond davantage à mes besoins.
Par contre j'ai voulu rajouter la condition qui dit que si aucun élément non null n'a été trouvé, il faut copier le dernier élément null, mais une fois de plus je n'y arrive pas (je crois que XSLT n'ait pas fait pour moi). J'ai fait ça :
<xsl:template match="package_desc">
<xsl:if test="not(preceding-sibling::*[text() != '' and name() = name(current())]) and (text() != ''" or current()[position()=last()])>
<xsl:copy-of select="."/>
</xsl:if>
</xsl:template>
et pour l'exemple suivant :
<package id="idPack1">
.........
<package_desc language="default"></package_desc>
<package_desc language="default">Pkg Desc2</package_desc>
<package_desc language="default"></package_desc>
......
</package>
<package id="idPack2">
.........
<package_desc language="default"></package_desc>
<package_desc language="default"></package_desc>
......
</package>
cela donne :
<package id="idPack1">
.........
<package_desc language="default"></package_desc>
<package_desc language="default">Pkg Desc2</package_desc>
......
</package>
<package id="idPack2">
.........
<package_desc language="default"></package_desc>
<package_desc language="default"></package_desc>
......
</package>
autre chose, je n'arrive toujours pas à intégrer ma suppression d'attribut:
par exemple dans l'exemple précédent,je veux supprimer l'attribut language.
En ajoutant la ligne
<xsl:template match="package_desc/@language" />
à la feuille de style, cela ne fonctionne pas. j'imagine que c'est parce que la précédente règle
<xsl:template match="package_desc">
surchage cette règle. Mais du coup je ne vois pas comment faire.