2012-10-08 8 views
10

Sto provando a passare un paio di parametri a un foglio di stile XSLT. Ho seguito l'esempio: Passing parameters to XSLT Stylesheet via .NET.Passare il parametro al foglio di stile XSLT

Ma la mia pagina trasformata non mostra correttamente il valore.

Ecco il mio codice C#. Ho dovuto aggiungere una funzione personalizzata per eseguire alcune operazioni aritmetiche perché Visual Studio 2010 non utilizza XSLT 2.0.

var args = new XsltArgumentList(); 
    args.AddExtensionObject("urn:XslFunctionExtensions", new XslFunctionExtensions()); 
    args.AddParam("processingId", string.Empty, processingId); 

    var myXPathDoc = new XPathDocument(claimDataStream); 
    var xslCompiledTransformation = new XslCompiledTransform(true); 

    // XSLT File 
    xslCompiledTransformation.Load(xmlReader); 

    // HTML File 
    using (var xmlTextWriter = new XmlTextWriter(outputFile, null)) 
    { 
     xslCompiledTransformation.Transform(myXPathDoc, args, xmlTextWriter); 
    } 

Ecco il mio XSLT:

<xsl:template match="/"> 
    <xsl:param name="processingId"></xsl:param> 
    ..HTML.. 
    <xsl:value-of select="$processingId"/> 

mi sto perdendo qualcosa?

+0

Avete '' al livello più alto? Sembra che tu definisca il tuo parametro all'interno di un modello che creerà un parametro locale. Per i parametri esterni il parametro deve essere globale, quindi deve essere definito allo stesso livello di xsl: elementi modello – Pawel

+0

Non sono sicuro di cosa intendi al livello principale. La definizione del parametro è inferiore a come ho incollato nella mia domanda. Al di sopra è il tag . – coson

+0

Intendevo dire che non dovrebbe essere contenuto in xsl: template. Prova qualcosa del tipo: ' ... ' – Pawel

risposta

15

Ecco il mio XSLT:

<xsl:template match="/">  
    <xsl:param name="processingId"></xsl:param>  
    ..HTML..  
    <xsl:value-of select="$processingId"/> 

mi sto perdendo qualcosa?

Sì, vi manca il fatto che l'invoker di una trasformazione XSLT può impostare i valori di a livello globale parametri - non i valori dei parametri a livello di modello.

Pertanto, il codice deve essere:

<xsl:param name="processingId"/>  

<xsl:template match="/">  
    ..HTML..  
    <xsl:value-of select="$processingId"/> 
    <!-- Possibly other processing here --> 
</xsl:template> 
+2

Questa è in realtà una cosa molto utile da sapere, qualcuno sa se questo può essere fatto anche usando Java? – adam5990

+0

@ adam5990, Sì, nel caso in cui il particolare processore XSLT utilizzato sia scritto in Java. Il modo per specificare i valori dei parametri globali a livello di programmazione è specifico dell'implementazione e varia da processore XSLT a processore XSLT. Vedi ad esempio questa sezione della documentazione di Saxon: saxonica.com/documentation/#!using-xsl/embedding/.... In particolare, si dice (al punto 1.): "È possibile utilizzare i metodi su XsltTransformer per impostare i valori per i parametri globali del foglio di stile" Si noti, tuttavia, che è molto più semplice farlo manualmente, invocare una trasformazione XSLT dal comando linea. –

Problemi correlati