[xsl] XML Update HOW TO?

Subject: [xsl] XML Update HOW TO?
From: Cristobal Galiano Fernandez <c.galiano@xxxxx>
Date: Fri, 12 Jan 2001 15:40:11 +0100
Hi everybody!

I wish update an XML file:

The node Paginas/Pagina[Tipo=New] must update Paginas/Pagina[Tipo=Old]
by unique ID.


<?xml version='1.0' encoding='ISO-8859-1'?>
<Paginas>
   <Pagina Id="Id1" Tipo="New">
      <texto ID='Etiqueta12' type='104'>AMod</texto>
      <texto ID='Etiqueta6' fuente='F2'>SIGNOMod</texto>
      <texto ID='ClOpe' >241</texto>
   </Pagina>
   <Pagina Id="Id1" Tipo="Old">
      <texto ID='Etiqueta12' type='100' fuente='F1' size='16' x = '211'
y = '690' x1='25' y1='19' modo='0'>A</texto>
      <texto ID='Etiqueta9' type='100' fuente='F1' size='8' x = '483' y
= '744' x1='54' y1='11' modo='0'>CL. OPERAC.</texto>
      <texto ID='Etiqueta6' type='100' fuente='F1' size='8' x = '483' y
= '727' x1='30' y1='11' modo='0'>SIGNO</texto>
      <texto ID='Etiqueta4' type='100' fuente='F1' size='8' x = '483' y
= '758' x1='16' y1='11' modo='0'>Ref</texto>
      <texto ID='Etiqueta3' type='100' fuente='F1' size='16' x = '231' y
= '755' x1='15' y1='21' modo='0'>D</texto>
      <texto ID='Etiqueta2' type='100' fuente='F1' size='16' x = '200' y
= '752' x1='25' y1='19' modo='0'>A</texto>
      <cuadro ID='Cuadro10' type='101' x='202' y = '711' x1='133'
y1='42'/>
      <cuadro ID='Cuadro1' type='101' x='225' y = '762' x1='29'
y1='20'/>
      <cuadro ID='Cuadro0' type='101' x='197' y = '762' x1='29'
y1='20'/>
      <linea1 ID='Línea11' type='102' x='242' y = '712' x1='0' y1='0'/>
      <texto ID='ClOpe' type='109' fuente='F1' size='8' x = '540' y =
'744' x1='85' y1='12' modo='0'>240</texto>
   </Pagina>
</Paginas>

The XSL constructed must done an output as

<Paginas>
   <Pagina Id="Id1" Tipo="Old">
      <texto ID='Etiqueta12' type='104' fuente='F1' size='16' x = '211'
y = '690' x1='25' y1='19' modo='0'>AMod</texto>
      <texto ID='Etiqueta9' type='100' fuente='F1' size='8' x = '483' y
= '744' x1='54' y1='11' modo='0'>CL. OPERAC.</texto>
      <texto ID='Etiqueta6' type='100' fuente='F2' size='8' x = '483' y
= '727' x1='30' y1='11' modo='0'>SIGNOMod</texto>
      <texto ID='Etiqueta4' type='100' fuente='F1' size='8' x = '483' y
= '758' x1='16' y1='11' modo='0'>Ref</texto>
      <texto ID='Etiqueta3' type='100' fuente='F1' size='16' x = '231' y
= '755' x1='15' y1='21' modo='0'>D</texto>
      <texto ID='Etiqueta2' type='100' fuente='F1' size='16' x = '200' y
= '752' x1='25' y1='19' modo='0'>A</texto>
      <cuadro ID='Cuadro10' type='101' x='202' y = '711' x1='133'
y1='42'/>
      <cuadro ID='Cuadro1' type='101' x='225' y = '762' x1='29'
y1='20'/>
      <cuadro ID='Cuadro0' type='101' x='197' y = '762' x1='29'
y1='20'/>
      <linea1 ID='Línea11' type='102' x='242' y = '712' x1='0' y1='0'/>
      <texto ID='ClOpe' type='109' fuente='F1' size='8' x = '540' y =
'744' x1='85' y1='12' modo='0'>241</texto>
   </Pagina>
</Paginas>

A first tentative was:

<xsl:stylesheet version="1.0"
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>

   <xsl:output method="xml" indent="yes"/>

   <xsl:template match="/">

      <xsl:apply-templates select="//Pagina[@Tipo='Old']" />
   </xsl:template>

   <xsl:template match="Pagina">

        <xsl:call-template name="Copia" />
  </xsl:template>

   <xsl:template name="Copia">
      <H1>Hola</H1>
       <xsl:for-each select="node()"> <!-- Para cada nodo -->

         <!--  [<xsl:value-of
select="/Paginas/Pagina[@Tipo='New']/[name()=current()]" />] -->

           <xsl:variable name="W">
                  <xsl:value-of
select="concat('Paginas/Pagina[@Tipo='New']/','')" />
                  <xsl:value-of select="concat('texto','')" />
                  <xsl:text>[@ID='Etiqueta12']</xsl:text>
           </xsl:variable>
           (<xsl:value-of select="$W" />)
           <xsl:variable name="W1">
                 <xsl:copy-of select="$W" />
           </xsl:variable>
            [<xsl:value-of select="$W1" />]
          <!--  <xsl:variable name="New"
select="/Paginas/Pagina[@Tipo='New']/texto[@ID='Etiqueta12']" /> -->
          <!--    <xsl:variable name="New" select="$W" /> -->
          <!--  (<xsl:value-of select="$New" />) -->
            <!-- <xsl:value-of select="name()" /> -->
            </xsl:for-each>

   <!--    <xsl:copy-of select="." /> -->
   </xsl:template>

</xsl:stylesheet>

but my problem is that <xsl:value-of select="$W" /> return the string
Paginas/Pagina[@Tipo=]/texto[@ID='Etiqueta12'] not the node-set

Can any help me

Thanks in advance

Cristóbal G.F.


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread