web-dev-qa-db-fra.com

XSL: éviter d'exporter des définitions d'espace de noms vers des documents XML résultants

J'aimerais prendre des données de certains fichiers XML et les transformer en un nouveau document XML. Cependant, je ne veux pas que la définition d'un espace de noms dans le XSLT se produise dans le document de résultat.

En d'autres termes:

la source:

<Namespace:Root xmlns:Namespace="http://www.something.com">

feuille de style:

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:Namespace="http://www.something.com">

résultat:

<resultRoot xmlns:Namespace="http://www.something.com">
<!--I don't want the Namespace definition above-->

J'utilise msxsl pour la transformation.

41
pypmannetjies

Vous pouvez utiliser le exclude-result-prefixes attribut de xsl:stylesheet élément pour éviter d'émettre des préfixes d'espace de noms dans le document de sortie:

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
         xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
         xmlns:prefix1="http://www.something.com"
         exclude-result-prefixes="prefix1">

</xsl:stylesheet>

Pour supprimer plusieurs espaces de noms du document de sortie, spécifiez-les séparés par des espaces:

exclude-result-prefixes="prefix1 prefix2 prefix3"

De la spécification XSLT :

Lorsqu'une feuille de style utilise une déclaration d'espace de noms uniquement dans le but de traiter l'arborescence source, la spécification du préfixe dans l'attribut exclude-result-prefixes évitera les déclarations d'espace de noms superflues dans l'arborescence des résultats.

72
Dirk Vollmar

la réponse de divo a déjà été choisie, et de manière appropriée.

Mais si vous êtes intéressé à creuser plus profondément, consultez la section "Too many namespaces" de mon magnum opus sur le sujet très populaire des "Namespaces in XSLT". (Oui, c'est censé être ironique. :-))

13
Evan Lenz