me escribe dos veces los atributos

17/12/2003 - 18:07 por mani14 | Informe spam
tengo una duda, estoy pasando un xml, lo estoy convirtiendo
a otro xml, el caso es qeu cuando leo los atributos me los
lee dos veces, se que ese es el fallo, pero no se como
solucionarlo, os pongo un ejemplo apra que veais lo que me
pasa.

el xml seria algo asi
<window xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
<id>aligner-window</id>
<title>Box Alignment Example</title>
<orient>horizontal</orient>
<onload>init();</onload>
</window>
el xsl asi:

<xsl:template match="/window">
<xsl:variable name="wid">
<xsl:value-of select="id"/>
</xsl:variable>
<xsl:variable name="wtitle">
<xsl:value-of select="title"/>
</xsl:variable>
<xsl:variable name="worient">
<xsl:value-of select="orient"/>
</xsl:variable>
<xsl:variable name="wonload">
<xsl:value-of select="onload"/>
</xsl:variable>
<window id="{$wid}" title="{$wtitle}" orient="{$worient}"
onload="{$wonload}" >
<!--<script> <xsl:value-of select="script"/> </script> -->
<xsl:for-each select="node()">
<!--nos dice que recorramos todos los nodos -->
<xsl:apply-templates select="."/>
</xsl:for-each>
</window>
</xsl:template>


y la salida esta:

<window
xmlns="http://www.mozilla.org/keymaster/ga....xul"
xmlns:html="http://www.w3.org/1999/xhtml"
xmlns:fo="http://www.w3.org/1999/XSL/Format"
onload="init();" orient="horizontal" title="Box Alignment
Example" id="aligner-window">
aligner-window
Box Alignment Example
horizontal
init();
como podeis observar en la salida despeus de haberme hecho
todo lo que le he mandado, me vuelve a savar los atributos
impresos por pantalla, esto es el principio del fichero, es
mayor, pero siempre me ocurre lo mismo, el caso es que me
imagino que el problema esta en <xsl:for-each select="node()">
<!--nos dice que recorramos todos los nodos -->
<xsl:apply-templates select="."/>
</xsl:for-each> del xsl, pero no se como solucionarlo,
es decir, una vez que me ha leido los atributos arriba, y
me los ha dejado como variable, qeu pase de ellos y no lo
vuelva a hacer.
Si me pudieseis hechar una mano os estaria muy agradecido.
Gracias.
Saludos.

Preguntas similare

Leer las respuestas

#1 Skar
17/12/2003 - 20:32 | Informe spam
el problema es que estabas pidiendo la informacion dos veces, una creando
los atributos y la segunda presentando la info dentro de window. Aqui va mi
xsl
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/window">
<xsl:copy>
<xsl:attribute name="id">
<xsl:value-of select="id"/>
</xsl:attribute>
<xsl:attribute name="title">
<xsl:value-of select="title"/>
</xsl:attribute>
<xsl:attribute name="orient">
<xsl:value-of select="orient"/>
</xsl:attribute>
<xsl:attribute name="onload">
<xsl:value-of select="onload"/>
</xsl:attribute>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
"mani14" wrote in message
news:2f1e01c3c4c0$52a66f70$
tengo una duda, estoy pasando un xml, lo estoy convirtiendo
a otro xml, el caso es qeu cuando leo los atributos me los
lee dos veces, se que ese es el fallo, pero no se como
solucionarlo, os pongo un ejemplo apra que veais lo que me
pasa.

el xml seria algo asi
<window xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
<id>aligner-window</id>
<title>Box Alignment Example</title>
<orient>horizontal</orient>
<onload>init();</onload>
</window>
el xsl asi:

<xsl:template match="/window">
<xsl:variable name="wid">
<xsl:value-of select="id"/>
</xsl:variable>
<xsl:variable name="wtitle">
<xsl:value-of select="title"/>
</xsl:variable>
<xsl:variable name="worient">
<xsl:value-of select="orient"/>
</xsl:variable>
<xsl:variable name="wonload">
<xsl:value-of select="onload"/>
</xsl:variable>
<window id="{$wid}" title="{$wtitle}" orient="{$worient}"
onload="{$wonload}" >
<!--<script> <xsl:value-of select="script"/> </script> -->
<xsl:for-each select="node()">
<!--nos dice que recorramos todos los nodos -->
<xsl:apply-templates select="."/>
</xsl:for-each>
</window>
</xsl:template>


y la salida esta:

<window
xmlns="http://www.mozilla.org/keymaster/ga....xul"
xmlns:html="http://www.w3.org/1999/xhtml"
xmlns:fo="http://www.w3.org/1999/XSL/Format"
onload="init();" orient="horizontal" title="Box Alignment
Example" id="aligner-window">
aligner-window
Box Alignment Example
horizontal
init();
como podeis observar en la salida despeus de haberme hecho
todo lo que le he mandado, me vuelve a savar los atributos
impresos por pantalla, esto es el principio del fichero, es
mayor, pero siempre me ocurre lo mismo, el caso es que me
imagino que el problema esta en <xsl:for-each select="node()">
<!--nos dice que recorramos todos los nodos -->
<xsl:apply-templates select="."/>
</xsl:for-each> del xsl, pero no se como solucionarlo,
es decir, una vez que me ha leido los atributos arriba, y
me los ha dejado como variable, qeu pase de ellos y no lo
vuelva a hacer.
Si me pudieseis hechar una mano os estaria muy agradecido.
Gracias.
Saludos.
Respuesta Responder a este mensaje
#2 mani14
18/12/2003 - 09:52 | Informe spam
estoy de acuerdo con lo que me pones, pero creo que se
obtendra otro problema, el caso es que tengo que recorrer
mas nodos que tiene window, no todos sus hijos son los
atributos. Tiene atributos, que son los leido, y despues
tiene hijos. esos hijos los leo con el bucle, pero me
vuelve a leer los atributos, yo pensaba que no me iba a
hacer nada con ellos, pq no tengo ningun match para ello,
pero segun tnego entendido, si no encuentra ningun match, y
se ha encontrado con un nodo, te saca su valor por pantalla.
El problema es ese, saca la informacion bien, y una segunda
vez la saca por pantalla, como texto normal.
Habia pensado hacer un match para que se pasara por el todo
lo que nohabia encontrado, que ese match no haga nada y ya
esta, no sacaria nada, pero no se que ponerle a ese match.
Muchas gracias por tu tiempo.
Saludos.
Respuesta Responder a este mensaje
#3 Skar
18/12/2003 - 14:03 | Informe spam
es lo que me temia, he estado jugando con un par de xsl para ver si puedo
crear atributos en forma dinamica, de esta manera no importaria el numero de
nodos que encontrara, si puedes enviame un ejemplo completo de el documento
a ser transformado,
y un ejemplo de el documento final y (si hay tiempo) yo te ayudo a crear el
xsl

mi email es skarface4arrobahotmailpuntocom


"mani14" wrote in message
news:055101c3c544$4ed31450$

estoy de acuerdo con lo que me pones, pero creo que se
obtendra otro problema, el caso es que tengo que recorrer
mas nodos que tiene window, no todos sus hijos son los
atributos. Tiene atributos, que son los leido, y despues
tiene hijos. esos hijos los leo con el bucle, pero me
vuelve a leer los atributos, yo pensaba que no me iba a
hacer nada con ellos, pq no tengo ningun match para ello,
pero segun tnego entendido, si no encuentra ningun match, y
se ha encontrado con un nodo, te saca su valor por pantalla.
El problema es ese, saca la informacion bien, y una segunda
vez la saca por pantalla, como texto normal.
Habia pensado hacer un match para que se pasara por el todo
lo que nohabia encontrado, que ese match no haga nada y ya
esta, no sacaria nada, pero no se que ponerle a ese match.
Muchas gracias por tu tiempo.
Saludos.
Respuesta Responder a este mensaje
#4 Skar
18/12/2003 - 16:03 | Informe spam
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/window">
&lt; window
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
<xsl:apply-templates/>
&gt;&lt;/window&gt;
</xsl:template>
<xsl:template match="*">
<xsl:for-each select=".">
<xsl:text> </xsl:text>
<xsl:value-of select="name()"/>="<xsl:value-of select="text()"/>"
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

No esta completamente listo pero creo que te sirva, el unico problema es
lograr que el < y el > aparescan en el xml, esto es lo que se produce.

<?xml version="1.0" encoding="UTF-16"?>
&lt; window
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
id="aligner-window"
title="Box Alignment Example"
orient="horizontal"
onload="init();"
&gt;

&lt;/window&gt;

"Skar" wrote in message
news:%
es lo que me temia, he estado jugando con un par de xsl para ver si puedo
crear atributos en forma dinamica, de esta manera no importaria el numero


de
nodos que encontrara, si puedes enviame un ejemplo completo de el


documento
a ser transformado,
y un ejemplo de el documento final y (si hay tiempo) yo te ayudo a crear


el
xsl

mi email es skarface4arrobahotmailpuntocom


"mani14" wrote in message
news:055101c3c544$4ed31450$
>
> estoy de acuerdo con lo que me pones, pero creo que se
> obtendra otro problema, el caso es que tengo que recorrer
> mas nodos que tiene window, no todos sus hijos son los
> atributos. Tiene atributos, que son los leido, y despues
> tiene hijos. esos hijos los leo con el bucle, pero me
> vuelve a leer los atributos, yo pensaba que no me iba a
> hacer nada con ellos, pq no tengo ningun match para ello,
> pero segun tnego entendido, si no encuentra ningun match, y
> se ha encontrado con un nodo, te saca su valor por pantalla.
> El problema es ese, saca la informacion bien, y una segunda
> vez la saca por pantalla, como texto normal.
> Habia pensado hacer un match para que se pasara por el todo
> lo que nohabia encontrado, que ese match no haga nada y ya
> esta, no sacaria nada, pero no se que ponerle a ese match.
> Muchas gracias por tu tiempo.
> Saludos.


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida