Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    Aiuto: passare un parametro ad un fogli di stile XSL

    Ciao a tutti,

    ho bisogno di un vostro aiuto per una particolare implementazione del mio sito web:
    il mio obiettivo è creare una pagina prendendo i dati da un documento XML. Ciò che non sono in grado di realizzare è passare un parametro attraverso un link di un altra pagina al foglio di stile XSL per filtrare solo i dati del documento XML che mi interessano.

    Ho gia pronti e funzionanti il file XML e il suo foglio di stile XSL, ma il parametro è valorizzato fisso nel foglio di stile. Ho bisogno che qualcuno mi dica passo per passo come valorizzare il parametro dall'esterno.

    Premetto che sono un totale ignorante di ASP, ma ho trovato lo script qui sotto che mi sembra un ottimo punto di partenza. Prende il input il nome di un file XML e un file XSL inseriti come parametri di un link, e visualizza il risultato della loro interazione:

    codice:
    <% 
    Dim xmldoc 
    Dim xsldoc
    
    'Use the MSXML 4.0 Version dependent PROGID 
    'MSXML2.DOMDocument.4.0 if you wish to create
    'an instance of the MSXML 4.0 DOMDocument object
     
    Set xmldoc = Server.CreateObject("MSXML2.DOMDocument") 
    Set xsldoc = Server.CreateObject("MSXML2.DOMDocument")
    
    xmldoc.Load Server.MapPath(Request.QueryString("xml"))
    
    'Check for a successful load of the XML Document.
    if xmldoc.parseerror.errorcode <> 0 then 
      Response.Write "Error loading XML Document :" & "
    "
      Response.Write "----------------------------" & "
    "
      Response.Write "Error Code : " & xmldoc.parseerror.errorcode & "
    "
      Response.Write "Reason : " & xmldoc.parseerror.reason & "
    "
      Response.End 
    End If
    
    
    xsldoc.Load Server.MapPath(Request.QueryString("xsl"))
    
    'Check for a successful load of the XSL Document.
    if xsldoc.parseerror.errorcode <> 0 then 
      Response.Write "Error loading XSL Document :" & "
    "
      Response.Write "----------------------------" & "
    "
      Response.Write "Error Code : " & xsldoc.parseerror.errorcode & "
    "
      Response.Write "Reason : " & xsldoc.parseerror.reason & "
    "
      Response.End 
    End If
    
    Response.Write xmldoc.TransformNode(xsldoc)
    
    %>
    Vorrei modificare il codice per passare un terzo parametro preso dal link e passarlo al foglio di stile XSL.

    Potete aiutarmi?

    Grazie

  2. #2
    Utente di HTML.it L'avatar di agenti
    Registrato dal
    Feb 2002
    Messaggi
    2,427
    inizializza l'xsl usando

    codice:
    Set xsl = CreateObject("Msxml2.FreeThreadedDOMDocument.3.0")  
    xsl.async = False
    xsl.resolveExternals = true
    xsl.load(Server.MapPath("tuo.xsl"))
    Set xslTemplate = CreateObject("Msxml2.XSLTemplate.3.0") 
    xslTemplate.stylesheet=xsl
    set proc=xslTemplate.createProcessor
    proc.input=xmlDoc 
    
    'passa il paramentro
    proc.addParameter "tuoparametro", ""&tuo_parametro&""

    fai presente che nel tuo xsl devi avere un tag <xslaram value="tuoparametro" />

    saluti...

  3. #3
    Grazie mille per la risposta,

    ora il mio codice si è trasformato così, ma continua a non funzionare: sembra che il parametro non arrivi al foglio XSL, di fatti la pagia visualizzata è vuota.

    codice:
    <% 
    Dim xmldoc 
    Dim xsldoc
    Dim xslTemplate 
    Dim xslProcessor
    
    'Use the MSXML 4.0 Version dependent PROGID 
    'MSXML2.DOMDocument.4.0 if you wish to create
    'an instance of the MSXML 4.0 DOMDocument object
     
    Set xmldoc = Server.CreateObject("MSXML2.DOMDocument.4.0") 
    xmldoc.Load Server.MapPath(Request.QueryString("xml"))
    
    'Check for a successful load of the XML Document.
    if xmldoc.parseerror.errorcode <> 0 then 
      Response.Write "Error loading XML Document :" & "
    "
      Response.Write "----------------------------" & "
    "
      Response.Write "Error Code : " & xmldoc.parseerror.errorcode & "
    "
      Response.Write "Reason : " & xmldoc.parseerror.reason & "
    "
      Response.End 
    End If
    
    
    Set xsldoc = Server.CreateObject("MSXML2.FreeThreadedDOMDocument.4.0")
    xsldoc.async = False
    xsldoc.resolveExternals = true
    xsldoc.Load Server.MapPath(Request.QueryString("xsl"))
    
    'Check for a successful load of the XSL Document.
    if xsldoc.parseerror.errorcode <> 0 then 
      Response.Write "Error loading XSL Document :" & "
    "
      Response.Write "----------------------------" & "
    "
      Response.Write "Error Code : " & xsldoc.parseerror.errorcode & "
    "
      Response.Write "Reason : " & xsldoc.parseerror.reason & "
    "
      Response.End 
    End If
    '-----------
    'Passo il parametro
    set xslTemplate = Server.CreateObject("MSXML2.XSLTemplate.4.0")
    xslTemplate.stylesheet = xsldoc
    set xslProcessor = xslTemplate.createProcessor()
    par1 = Request.QueryString("show_gallery")
    xslProcessor.addParameter "show_gallery", ""&par1&""
    
    'Eseguo la trasformazione
    xslProcessor.input = xmldoc
    xslProcessor.transform()
    Response.Write(xslProcessor.output)
    '------------
    'Response.Write xmldoc.TransformNode(xsldoc)
    
    %>
    Dove sbaglio? Qi ti metto anche il codice XSL

    codice:
    <?xml version="1.0" encoding="iso-8859-1"?>
    <!--
    <!DOCTYPE xsl:stylesheet  [
    	<!ENTITY nbsp   "&#160;">
    	<!ENTITY copy   "&#169;">
    	<!ENTITY reg    "&#174;">
    	<!ENTITY trade  "™">
    	<!ENTITY mdash  "—">
    	<!ENTITY ldquo  "“">
    	<!ENTITY rdquo  "”"> 
    	<!ENTITY pound  "&#163;">
    	<!ENTITY yen    "&#165;">
    	<!ENTITY euro   "€">
    ]>
    -->
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output 
    		method="html"
    		indent="yes"
    		encoding="iso-8859-1" 
    		doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" 
    		doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"/>
    <xsl:template match="/">
    
    
    	<xsl:param name="show_gallery"/>
    	
    
    	<xsl:variable name="path_img_small">opere/preview/</xsl:variable>
    	<xsl:variable name="path_img_large">opere/</xsl:variable>
    
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    	<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
    	<link rel="stylesheet" type="text/css" href="style/standard.css" /> 
    
    	<style type="text/css">
    		@import url(style/gallery2.css);
    	</style>	
    	
    	<title>Daniele Sangermani - Galleria: <xsl:value-of select="$show_gallery"/></title>
    </head>
    <body>
    	<div id="main_section">
    
    		
    		<div class="gallery_title"><h1><xsl:value-of select="$show_gallery" /></h1></div>
      
    		
    		<div class="navbar">
    			<div class="navbar_left">Vai alla Galleria</div>
    			<div class="navbar_right" >Vai alla Presentazione</div>
    		</div>
      
    		
    		<div id="preview_container" > 
    			<ul id="gallery">
    				<xsl:for-each select="paints/paint"> 
    				<xsl:if test=" gallery=$show_gallery ">
    					<xsl:if test=" hide='NO' ">
    					[*]
    						<div class="thumb">
    							<a href="{$path_img_large}{large_pic}" target="_new">
    								[img]{$path_img_small}{small_pic}[/img]</a>
     						</div> 
             				<div class="title"><xsl:value-of select="title" /></div>
    		        		<div class="description"><xsl:value-of select="info" /> - <xsl:value-of select="size" /> </div>
    			        	<div class="year"><xsl:value-of select="year" /></div>
    					
    					</xsl:if>
    				</xsl:if>
    				</xsl:for-each>	
    			[/list]
    		</div>
    		  
    		<div class="navbar">
    			<div class="navbar_left">Vai alla Galleria</div>
    			<div class="navbar_right" >Vai alla Presentazione</div>
    		</div>
    
    	</div>
    </body>
    </html>
    
    </xsl:template>
    
    </xsl:stylesheet>
    I parametri li passo con questo link nella pagina chiamante

    codice:
    href="TransformXml.asp?xml=gallery.xml&xsl=gallery.xsl&show_gallery=A"
    Grazie

  4. #4
    Originariamente inviato da agenti

    fai presente che nel tuo xsl devi avere un tag <xslaram value="tuoparametro" />
    value="tuoparametro" value non mi sembra un attributo previsto... forse volevi dire name="tuoparametro"

  5. #5
    Utente di HTML.it L'avatar di agenti
    Registrato dal
    Feb 2002
    Messaggi
    2,427
    si , nella fretta , usa name

  6. #6
    Comunque non funziona ugualmente... Hai qualche idea? Ti sembra che ci sia qualcosa di sbagliato?

  7. #7
    Utente di HTML.it L'avatar di agenti
    Registrato dal
    Feb 2002
    Messaggi
    2,427
    <xslaram name="show_gallery"/>


    mettilo fuori dal template...

    poi , fai un test usando solo il template necessario per visualizzare escusivamente il tuo parametro...

  8. #8

    RISOLTO:

    FUNZIONA!

    Ho spostato

    codice:
    	<xsl:param name="show_gallery" />
    prima di

    codice:
            <xsl:template match="/">
    E tutto funziona a meraviglia. Grazie infinite!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.