Changement de noms de fichier XML XSL Traduction

J'ai donc un fichier d'entrée qui utilise mon entreprise d'espace de noms dans l'espace de noms par défaut (xmlns="companyURL") mais je veux que mon fichier de sortie à utiliser autre chose que l'espace de noms par défaut (xmlns:cmp="companyURL"). Donc je construire mon fichier à l'aide de la cmp espace de noms, mais je veux copier certains éléments intérieurs:

<xsl:element name="cmp:container">
  <xsl:for-each select="foo">
    <xsl:copy-of select="." />
  </xsl:for-each>
</xsl:element>

Malheureusement, ce n'est de définir l'espace de noms par défaut pour chacun de ces éléments internes, rendant le fichier incroyablement détaillé et le laid. Exemple simplifié:

Source:

<foo xmlns="companyURL">
  <num1>asdf</num1>
  <num2>ghjkl</num2>
</foo>

Se transforme en:

<cmp:container xmlns:cmp="companyURL">
  <num1 xmlns="companyURL">asdf</num1>
  <num2 xmlns="companyURL">ghjkl</num2>
</cmp:container>

Bien sûr, companyURL est gros et long et moche, et c'est la même dans les deux endroits, donc je préfère le résultat ci-dessus pour juste être la suivante:

<cmp:container xmlns:cmp="companyURL">
  <cmp:num1>asdf</cmp:num1>
  <cmp:num2>ghjkl</cmp:num2>
</cmp:container>

Est-il un moyen facile de faire cela, ou dois-je tout convertir en vertu de la cmp espace de noms à l'espace de noms par défaut? Je préfère utiliser explicitement l'espace de noms de nommage si possible, il aide à comprendre le XSLT dans mon expérience.

Bonne question (+1). Voir ma réponse pour une courte et simple solution 🙂
"voulez mon fichier de sortie à utiliser autre chose que l'espace de noms par défaut" >> suivant votre exemple, en changeant le préfixe (ou de défaut à un préfixe) ne signifie pas l'évolution de l'espace de noms. Les éléments, à partir d'un XML+NS point de vue, restera égale (localname + espace de noms n'est pas modifiée), même si le préfixe est différent.
Je faisais allusion à la visible identificateur devant le nom de la balise.

OriginalL'auteur adam_0 | 2010-08-12