C'est une exigence étrange.
Comme XSLT travaille sur un modèle de document analysé, vous ne pouvez pas le faire de manière fiable. En particulier, la distinction entre les notations équivalentes sera nécessairement perdue. Les notations équivalentes incluent des choses comme <tag></tag>
par rapport à <tag/>
ou é
par rapport à é
.
Cela dit, une approche générale qui pourrait fonctionner consisterait à utiliser la fonction mode
attribut de xsl:template
y xsl:apply-template
pour passer à un mode qui rend explicitement tous les éléments sous forme de texte. En fait, vous écririez un sérialiseur XML en XSLT.
Un problème se pose cependant : il faut alors faire une double incrustation des caractères spéciaux tels que <>"'
lorsqu'il est présent dans les valeurs d'attributs et les nœuds de texte. Et XSLT est assez inefficace pour ce type de broyage de chaînes.
Un autre problème serait de rendre les préfixes d'espace de noms raisonnables. Vous pouvez très certainement le faire, mais ce serait assez horrible.