Al intentar analizar el siguiente xml ,
<root> <SelectValue>One</SelectValue> <!-- Tends to Vary --> <SubRoot> <!-- Iterate elements inside it using [ SelectValue] --> <One>One</One> <Two>Two</Two> <Three>Three</Three> </SubRoot> </root> con debajo de xsl ,
<xsl:template match="/root"> <xsl:variable name="columns" select="SelectValue"/> <xsl:for-each select="SubRoot"> --> <tr> <td> <xsl:value-of select="SubRoot/@*[local-name()=$columns]"/> </td> </tr> </xsl:for-each> Recupera html-tags vacías mientras espero algo como a continuación,
<table> <thead> <th>One</th> </thead> <tbody> <tr> <td>one</td> </tr> <tbody> </table> Estoy tratando de pasar el valor dentro <SelectValue> para obtener los nodos dentro <SubRoot>
¿Alguna idea aquí?
No reconozco el mensaje de error que cita (ni siquiera parece estar en inglés), pero recibo un error cuando intento ejecutar su código. La razón es que su nombre de variable no es válido; necesitas cambiar:
<xsl:variable name="$columns" select="..."/>para:
<xsl:variable name="columns" select="..."/> Use el prefijo $ cuando se refiera a la variable, no cuando la defina.
Tenga en cuenta también que una expresión XPath que comienza con / es una ruta absoluta , que comienza en el nodo raíz. Por lo tanto, ninguna de sus expresiones de select , con la excepción de /root , seleccionará nada. Supongo que estás tratando de hacer algo como:
<xsl:template match="/root"> <xsl:variable name="columns" select="SelectValue"/> <tr> <td> <xsl:value-of select="SubRoot/*[local-name()=$columns]"/> </td> </tr> </xsl:template>que dado su ejemplo de entrada devolverá:
<tr> <td>One</td> </tr>Dentro de xsl:for-each select="SubRoot", la SubRaíz es el nodo de contexto, por lo que no debe seleccionar una SubRaíz adicional. Entonces quieres
<xsl:for-each select="SubRoot"> <tr> <td> <xsl:value-of select="@*[local-name()=$columns]"/> </td> </tr>