2010-07-14 24 views
5

Tengo un problema.¿Cómo pasar los parámetros a XSLT?

Tengo un archivo XML que contiene información sobre 100 cursos.

Tengo un archivo XSL que muestra muy bien la lista de 100 cursos.

Pero, ¿y si quiero mostrar solo 1 curso? ¿Puedo pasar un parámetro al archivo XSLT para decirle que solo muestre "ENGL 100"?

El XML es como la siguiente:

<document> 
<menu> 
    <item> 
     <name>MTH 300</name> 
     <brief>Mathematics Skill Development</brief> 
     <description>A course in the fundamentals of ...</description> 
    </item> 
    <item> 
     <name>MTH 301</name> 
     <brief>Basic Algebra</brief> 
     <description>An introduction to algebra, ...</description> 
    </item> 
... 

Sé que podría escribir un archivo XSLT denominado "eng100.xsl" a través del bucle de XML y mostrar sólo ENG 100 pero no quieren tener para escribir docenas de estos archivos.

XML es dinámico y puedo controlarlo. Quiero que el archivo XSLT sea estático y nunca cambie.

¿Hay alguna forma de pasar parámetros al XSLT?

+1

Tenga en cuenta que la respuesta depende en parte del motor XSLT que está utilizando y cómo lo está invocando. –

Respuesta

6

Puede pasar parámetros a XSLT, la forma en que esto se hace depende de su procesador XSLT, pero generalmente como argumentos de comandos adicionales, si se trata de un procesador de línea de comandos.

se declara utilizando parámetros

<xsl:param name="courseName" select"initialValue"/> 

A continuación, puede probar este parámetro en su XSLT, e invocar una plantilla diferente en función de su valor. Por ejemplo, si el parámetro está vacío, invoque la plantilla actual que procesa todos los elementos; de lo contrario, invoque una plantilla que solo procese elementos cuando el nombre del elemento sea igual al valor del parámetro. Puede hacerlo con una prueba

<xsl:template match="item"> 
     <xsl:if test="$courseName=name(./name)"> 
     <xsl:call-template name="yourOriginalTemplate"/> 
     </xsl:if> 
    </xsl:template> 

Pero filtrando y formateando, está mezclando dos preocupaciones en un archivo. Yo separaría la selección de los elementos XML del formato; tengo dos archivos xslt para eso y los ejecuto como una interconexión.

+0

Buena respuesta. +1. –

+0

Además, para algunos escenarios, podría usar un documento de entrada de "metadatos" que dirija la transformación y acceda al documento "datos" con la función 'document()'. Esto costará en eficiencia. –

+3

¿Qué sucede si el documento xml tiene una instrucción de procesamiento ¿Es posible pasar el parámetro xsl al archivo xml por url-encoded name = value ¿parámetro? Quiero decir, ¿puedo hacer algo como esto entonces: mycontent.xml? CourseName = MTH300 – brighty

Cuestiones relacionadas