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

Je voudrais 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:

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.

37
demandé sur Cœur 2009-05-13 13:38:09

3 réponses

Vous pouvez utiliser l'attribut exclude-result-prefixes de l'élément xsl:stylesheet pour supprimer les espaces de noms du 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:Namespace="http://www.something.com"
         exclude-result-prefixes="Namespace">

</xsl:stylesheet>

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

exclude-result-prefixes="ns1 ns2 ns3"

À partir de la spécification XSLT :

Lorsqu'une feuille de style utilise une déclaration d'espace de noms uniquement à des fins d'adressage de l'arborescence source, la spécification du préfixe dans l'attribut exclude-result-prefixes évitera un espace de noms superflu déclarations dans l'arborescence des résultats.

63
répondu Dirk Vollmar 2009-05-13 10:25:57

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 "trop d'espaces de noms" dans mon opus magnum sur le sujet très populaire des "espaces de noms dans XSLT". (Oui, c'est censé être la langue dans la joue. :-) )

11
répondu Evan Lenz 2009-05-13 10:17:38

Utiliser l'extension-element-prefixes="espace de Noms"

Comme:

<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:datetime="http://exslt.org/dates-and-times"
xmlns:str="http://exslt.org/strings"
xmlns:exsl="http://exslt.org/common"
xmlns:uw="xalan://ru.sbtc.util.XSLUtil"
extension-element-prefixes="exsl str datetime uw"
version="1.0">
-4
répondu alamar 2009-05-13 09:40:48