XSL - Problemas con MSXSL.EXE

 
Vista:

Problemas con MSXSL.EXE

Publicado por Juan Torres (1 intervención) el 01/07/2003 09:27:37
Hola grupo:

Me he creado un XSL que usa el elemento <msxsl:script... Cuando enlazo un
XML a un XSL, y ejecuto dicho XML, el resultado es correcto. No obstante si
intento generar el HTML en un fichero, usando el programa de línea de
comandos MSXSL.EXE, el HTML que me genera no es correcto.
El problema es el siguiente: Desde el script quiero moverme por los nodos
usando DOM, en el momento que estoy en un nodo con hijos, si aplico
.firstChild, no se me situa correctamente en el nodo hijo, siendo imposible
rescatar ningún valor del nodo. Estoy usando el Parser MSXML 4.0, también he
probado con el 3.0, y la salida es también incorrecta.
Os pongo el XML, el XSL y las dos salidas, a ver si me podéis ayudar.
Muchas gracias,
Juan Torres. (jto_star[at]yahoo.es)

XML:
<!--
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="script.xsl" ?>
<CUSTOMERS>
<CUSTOMER>
<NAME>John Smith</NAME>
<ADDRESS>123 Elm St.</ADDRESS>
<PHONE>(123) 456-7890</PHONE>
</CUSTOMER>
<CUSTOMER>
<NAME>Mary Jones</NAME>
<ADDRESS>456 Oak Ave.</ADDRESS>
<PHONE>(156) 789-0123</PHONE>
</CUSTOMER>
<CUSTOMER>
<NAME>Juan</NAME>
<ADDRESS>Armengual Mota</ADDRESS>
<PHONE>(111) 111-1111</PHONE>
</CUSTOMER>
<CUSTOMER>
<NAME>Maria</NAME>
<ADDRESS>El Parque</ADDRESS>
<PHONE>(222) 222-2222</PHONE>
</CUSTOMER>
<CUSTOMER>
<NA
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Problema al generar HTML desde un archivo XSL con script usando MSXSL.EXE

Publicado por Alejandro (227 intervenciones) el 04/07/2023 23:52:12
El problema que estás experimentando al generar HTML utilizando el programa de línea de comandos MSXSL.EXE puede estar relacionado con la forma en que estás accediendo a los nodos utilizando DOM en tu script XSL.

Sin embargo, el uso de script en XSL para manipular DOM puede tener limitaciones dependiendo del procesador XSLT que estés utilizando. MSXSL.EXE utiliza el procesador MSXML, que tiene ciertas particularidades y restricciones.

A continuación, te brindaré una posible solución que podrías intentar para acceder a los nodos hijos correctamente:

1. En lugar de utilizar el método `firstChild`, puedes utilizar el método `selectSingleNode` para obtener el primer nodo hijo. Aquí tienes un ejemplo de cómo podrías hacerlo:

1
2
3
4
5
6
<xsl:template match="/">
  <xsl:variable name="customer" select="/CUSTOMERS/CUSTOMER[1]" />
  <xsl:variable name="firstChild" select="$customer/*[1]" />
  <xsl:value-of select="$firstChild" />
</xsl:template>

En este ejemplo, se asigna el primer nodo `CUSTOMER` a la variable `$customer`, y luego se utiliza la expresión `$customer/*[1]` para obtener el primer nodo hijo.

2. Otra opción es utilizar XPath para seleccionar directamente el valor del nodo hijo en lugar de acceder a él a través de métodos DOM. Por ejemplo:

1
2
3
4
<xsl:template match="/">
  <xsl:value-of select="/CUSTOMERS/CUSTOMER[1]/*[1]" />
</xsl:template>

En este caso, se utiliza la expresión XPath `/CUSTOMERS/CUSTOMER[1]/*[1]` para seleccionar directamente el valor del primer nodo hijo del primer nodo `CUSTOMER`.

Es importante tener en cuenta que el soporte de script y el acceso a DOM pueden variar entre los diferentes procesadores XSLT. Si el problema persiste, puede ser útil considerar el uso de un procesador XSLT más actualizado o buscar alternativas para manipular los datos en tu XSL.

Espero que esta información sea útil para resolver el problema que estás experimentando.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar