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.
 

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.

Preguntas similares