Supprimer la déclaration d'espace de noms de feuille de style XSLT avec XSLT

J'ai une feuille de style XSLT comme suit:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                  xmlns:XQHeaderFunc="java:com.sonicsw.xq.service.xform.HeaderExtension"
                  xmlns:saxon="http://saxon.sf.net/">

  <saxon:script language="java" implements-prefix="XQHeaderFunc" src="java:com.sonicsw.xq.service.xform.HeaderExtension" />

  <xsl:output indent="yes" omit-xml-declaration="yes"/>

  <xsl:template match="/">
    <xsl:variable name="processId" select="XQHeaderFunc:getProperty(XQHeaderFunc:new(),'processId',-1)" />
    <xsl:value-of select="XQHeaderFunc:setProperty(XQHeaderFunc:new(),'processId',string(@id),-1)"/>

    <root>
      <xsl:apply-templates />
    </root>

  </xsl:template>

  <!-- Other stuff -->

</xsl:stylesheet>

Je veux transformer cette feuille de style à l'aide d'une deuxième feuille de style XSLT pour supprimer tout ce qui a à voir avec la XQHeaderFunc et saxon espaces de noms. Est-il un moyen pour que je puisse faire cela?


Maintenant, j'ai essayé le suivant, qui traite avec succès avec les éléments, mais la déclaration d'espace de noms n'a pas l'air de vouloir disparaître.

<xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:XQHeaderFunc="java:com.sonicsw.xq.service.xform.HeaderExtension"
                xmlns:saxon="http://saxon.sf.net/"
                exclude-result-prefixes="XQHeaderFunc saxon">

  <xsl:param name="XQHeaderReplacement" />
  <xsl:variable name="apos">'</xsl:variable>

  <!-- Copy all nodes -->
  <xsl:template match="node()|@*">
    <xsl:copy>
      <xsl:apply-templates select="node()|@*"/>
    </xsl:copy>
  </xsl:template>

  <!-- Remove saxon script tag -->
  <xsl:template match="saxon:script" />

  <!-- Remove elements with setProperty calls -->
  <xsl:template match="*[starts-with(@select, 'XQHeaderFunc:setProperty')]" />

  <!-- Replace getProperty calls with replacement value-->
  <xsl:template match="@select[starts-with(., 'XQHeaderFunc:getProperty')]">
      <xsl:attribute name="select">
        <xsl:value-of select="concat($apos, $XQHeaderReplacement, $apos)"/>
      </xsl:attribute>
    </xsl:template>
</xsl:stylesheet>

De sortie:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0" 
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
                xmlns:XQHeaderFunc="java:com.sonicsw.xq.service.xform.HeaderExtension" 
                xmlns:saxon="http://saxon.sf.net/">

  <xsl:output indent="yes" omit-xml-declaration="yes" />

  <xsl:template match="/">
    <xsl:variable name="processId" select="''" />


    <root>
      <xsl:apply-templates />
    </root>

  </xsl:template>

  <!-- Other stuff -->

</xsl:stylesheet>
S'il vous plaît, fournir une source complète de document XML (la 1ère feuille de style). Il y a des opérations qui doivent être réalisées dont vous ne semblez pas être au courant. En général, il suffit de retirer la déclaration d'espace de noms mène à un non-(espace)bien formé résultat et le processeur XSLT permet d'éviter ce par la génération d'une nouvelle déclaration d'espace de noms.
Mise à jour de la question plus spécifique de la source et un nouvel exemple de ce que j'ai essayé de sortir maintenant.
Votre mise à jour est utile, mais s'il vous plaît poster les résultats réels que vous obtenez à partir de votre transformation. Qui va nous aider à savoir exactement à quoi il ressemble, afin que nous puissions comprendre pourquoi il a encore le ns decl.
Ajouté la source exacte de ces deux fichiers xslt et la source de la sortie après l'exécution dans Visual Studio 2012.
OK, merci. En la regardant. Pourquoi est-il si important pour vous de retirer la déclaration d'espace de noms? Vous savez qu'il est censé ne pas avoir d'impact significatif sur la sémantique de la sortie XML, droit?

OriginalL'auteur Svish | 2012-09-17