XML
- XML Básico
- Referencias
- Herramientas
- Metodología
- Ejemplos
- Otros Enlaces
Ruta: >Programación>XML
En html tenemos los siguientes tags: |
En xml los cambiamos: |
Sustituir en: |
Borrar desde <html> a <body> inclusive
e insertar los tags de comienzo de xml |
<?xml version='1.0' encoding='ISO-8859-1'?>
<?xml-stylesheet type='text/xsl' href='http://tic2.dyndns.org/ Librerias/xmldocs/templates/WebTIC/ Arbol/arbolPagina-cnt.xsl'?> <menu xmlns:xsi='<a href='http://www.w3.org/ 2001/XMLSchema-instance'> http://www.w3.org/2001/ XMLSchema-instance</a>' xsi:noNamespaceSchemaLocation=' <a href='http://tic2.dyndns.org/ Librerias/xmlDocs/Templates/WebTIC/ Arbol/arbolEntryTextUrl.xsd'> http://tic2.dyndns.org/Librerias/ xmlDocs/Templates/WebTIC/Arbol/ arbolEntryTextUrl.xsd</a>'> |
Al principio del archivo xml |
Al final del archivo quitar </body> </html> | </menu> | Al final del archivo xml |
<h1> o <h2> | <title>xxx</title> | buscar |
<li> | <entry> | todos |
</li> | </entry> | todos |
<a href =' | <url> | todos |
'> | </url><text> | todos(menos en el tag <menu...>) |
</a> | </text> | todos |
<ul> | blanco | todos |
</ul> | blanco | todos |
<ol> | blanco | |
</ol> | blanco | |
En el archivo xml, cambiar el orden de los elementos:
primero el tag <text>, después el tag <url> y el tag <descrip> si lo hay, para que aparezca el texto antes que la url, y no de error al chequearlo contra el xsd. |
blanco | todos |
Por cada <text>, <url> y <descrip>
(este último es opcional) que haya en el archivo xml, se incluye un tag <entry>, que engloba a los otros tres: |
<entry> <text>xxx</text> <url>xxx</url> <descrip>xxx</descrip> </entry> |
todos |
Para poner otros textos
que no sean de hiperenlace ni descripción, se puede utilizar el tag <entry> de manera recursiva. |
<entry> <text>xx</text> <entry> <text>xx</text> <url>xx</url> </entry> </entry> |
todos |
á | á |
buscar |
é | é | |
í | í | |
ó | ó | buscar |
ú | ú | |
'de; | ñ | |
Verificar todo y corregir lo necesario | En todo el documento |
Para Convertir un documento XML a HTML, hay que realizar una transformación del documento XML con otro documento XSL.
LinkEjemplo.xml
Ver como XML |
LinkEjemplo.xsl
Ver como XSL |
---|---|
<?xml version='1.0' encoding='ISO-8859-1'?> <?xml-stylesheet type='text/xsl' href='LinkEjemplo.xsl'?> <!-- Este es nuestro primer archivo XML --> <Pag> <Titulo>Como hacer enlaces en XML</Titulo> <PagDesc>Enlace www.terra.es</PagDesc> <Enlace> <Titulo>Link http://www.terra.es</Titulo> <Link>Enlace a Terra</Link> <URL>http://www.terra.es</URL> </Enlace> </Pag> |
<?xml version='1.0' encoding='ISO-8859-1'?> <xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.0'> <!-- Este es nuestro primer archivo XSL --> <xsl:template match='/'> <!-- Aqui comienza la plantilla --> <html> <head> <title> <xsl:value-of select='/Pag/Titulo' /> </title> </head> <body> <h1> <xsl:value-of select='/Pag/Titulo' /> </h1> <p> <xsl:value-of select='/Pag/PagDesc' /> </p> <p>Pon el cursor sobre el siguiente enlace para ver el texto alternativo (atributo ALT de HTML) y la web con la que enlaza (atributo HREF de HTML).</p> <p> <a> <xsl:attribute name='href'> <xsl:value-of select='/Pag/Enlace/URL' /> </xsl:attribute> <xsl:attribute name='title'> <xsl:value-of select='/Pag/Enlace/Titulo' /> </xsl:attribute> <xsl:attribute name='target'> <xsl:value-of select='/Pag/Enlace/@target' /> </xsl:attribute> <xsl:value-of select='/Pag/Enlace/Link' /> </a> </p> </body> </html> </xsl:template> </xsl:stylesheet> |
XMLejemplo.xml Ver como XML |
XSLejemplo.xsl Ver como XML |
---|---|
<?xml version='1.0' encoding='ISO-8859-1'?> <?xml-stylesheet type='text/xsl' href='xslejemplo.xsl'?> <!-- Este es nuestro primer archivo XML --> <Pag> <Titulo>Imagen de gráfico</Titulo> <PagDesc>Se muestra...</PagDesc> <Imagen>imagen.gif</Imagen> </Pag> |
<?xml version='1.0' encoding='ISO-8859-1'?> <xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.0'> <!-- Este es nuestro primer archivo XSL --> <xsl:template match='/'> <!-- Aqui comienza la plantilla --> <html> <body> <h1> <xsl:value-of select='/Pag/Titulo' /> </h1> <p> <xsl:value-of select='/Pag/PagDesc' /> </p> <img> <xsl:attribute name='src'> <xsl:value-of select='/Pag/Imagen' /> </xsl:attribute> </img> <p></p> </body> </html> </xsl:template> </xsl:stylesheet> |
XMLejemplo.xml Ver como XML |
XSLejemplo.xsl Ver como XML |
---|---|
<?xml version='1.0' encoding='ISO-8859-1'?> <?xml-stylesheet type='text/xsl' href='xslejemplo2.xsl'?> <!-- Este es nuestro primer archivo XML --> <Pag> <Titulo>Imagen de gráfico</Titulo> <PagDesc>Se muestra...</PagDesc> <Imagen>imagen.gif</Imagen> </Pag> |
<?xml version='1.0' encoding='ISO-8859-1'?> <xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.0'> <!-- Este es nuestro primer archivo XSL --> <xsl:template match='/'> <!-- Aqui comienza la plantilla --> <html> <body> <h1> <xsl:value-of select='/Pag/Titulo' /> </h1> <p> <xsl:value-of select='/Pag/PagDesc' /> </p> <img> <xsl:attribute name='src'> <xsl:value-of select='/Pag/Imagen' /> </xsl:attribute> <xsl:attribute name='height'> <xsl:value-of select='/Pag/Imagen/@height'/> </xsl:attribute> <xsl:attribute name='width'> <xsl:value-of select='/Pag/Imagen/@width'/> </xsl:attribute> </img> <p></p> </body> </html> </xsl:template> </xsl:stylesheet> |
XMLejemplo.xml Ver como XML |
XSLejemplo.xsl Ver como XML |
---|---|
<?xml version='1.0' encoding='ISO-8859-1'?> <?xml-stylesheet type='text/xsl' href='xslejemplo.xsl3'?> <!-- Este es nuestro primer archivo XML --> <Pag> <Titulo>Imagen de gráfico</Titulo> <PagDesc>Se muestra...</PagDesc> <Imagen>imagen.gif</Imagen> </Pag> |
<?xml version='1.0' encoding='ISO-8859-1'?> <xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.0'> <!-- Este es nuestro primer archivo XSL --> <xsl:template match='/'> <!-- Aqui comienza la plantilla --> <html> <body> <h1> <xsl:value-of select='/Pag/Titulo' /> </h1> <p> <xsl:value-of select='/Pag/PagDesc' /> </p> <img> <xsl:attribute name='src'> <xsl:value-of select='/Pag/Imagen' /> </xsl:attribute> <xsl:attribute name='height'> <xsl:value-of select='/Pag/Imagen/@height'/> </xsl:attribute> <xsl:attribute name='width'> <xsl:value-of select='/Pag/Imagen/@width'/> </xsl:attribute> </img> <p>Pon el cursor sobre la siguiente imagen para ver el texto alternativo (Atributo ALT de HTML).</p> <a> <xsl:attribute name='href'> <xsl:value-of select='/Pag/Imagen2/URL'/> </xsl:attribute> <img> <xsl:attribute name='src'> <xsl:value-of select='/Pag/Imagen2/Origen'/> </xsl:attribute> <xsl:attribute name='alt'> <xsl:value-of select='/Pag/Imagen2/Titulo'/> </xsl:attribute> <xsl:attribute name='border'> <xsl:value-of select='/Pag/Imagen2/@border'/> </xsl:attribute> </img> </a> </body> </html> </xsl:template> </xsl:stylesheet> |
<InformacionPersonal> <Nombre>Jaime</Nombre> <Apellido1>López</Apellido1> <Apellido2>Trujillo</Apellido2> </InformacionPersonal>
<html> <body> <xsl:value-of select="/InformacionPersonal/Nombre" /> <xsl:value-of select="/InformacionPersonal/Nombre" /> <xsl:value-of select="/InformacionPersonal/Nombre" /> </body> </html>
<html> <body> <xsl:value-of select="/InformacionPersonal/Nombre" />  <xsl:value-of select="/InformacionPersonal/Nombre" />  <xsl:value-of select="/InformacionPersonal/Nombre" /> </body> </html>
document.xml
(pulsa para ver el archivo) |
document.xsl
(pulsa para ver el archivo) |
---|---|
<?xml version='1.0' encoding="ISO-8859-15"?> <?xml-stylesheet type="text/xsl" href="../Conceptos/Metodologia/ ReferenciarXMLs/document.xml" ?> <groups> <groupRef href="hrGroup.xml"/> <groupRef href="myGroup.xml"/> </groups> |
<?xml version='1.0' encoding ="ISO-8859-15"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <groups> <xsl:apply-templates select="//groupRef"/> </groups> </xsl:template> <xsl:template match="groupRef"> <xsl:copy-of select="document(@href)//group"/> </xsl:template> </xsl:stylesheet> |
hrGroup.xml
(pulsa para ver el archivo) |
myGroup.xml
(pulsa para ver el archivo) |
<?xml version='1.0' encoding ="ISO-8859-15"?> <group name="hr"> <leader>Juan Sánchez</leader> <member>Pepe</member> <member>Pepita</member> <member>Pepón</member> </group> |
<?xml version='1.0' encoding ="ISO-8859-15"?> <group name="my"> <leader>Pedro Martín</leader> <member>Luis</member> <member>Luisa</member> <member>Luisito</member> </group> |
var srcDoc=loadSource(book_catalog); var processor=getProcessor(catalog_filter)
XSL es un lenguaje funcional y como tal no se permite la asignación de variables, ni hacer bucles que almacenen el valor de una variable entrevarias iteraciones del bucle. La alternativa al bucle es la recursión y las variables se almacenan en los parámetros de invocación al template.
<!-- ++++++++++++++++++++++ Template raiz cuadrada ++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ --> <xsl:template name='sqrt'> <xsl:param name='num' select='0'/> <!-- The number you want to find the square root of --> <xsl:param name='try' select='1'/> <!-- The current 'try'. This isused internally. --> <xsl:param name='iter' select='1'/> <!-- The current iteration, checked against maxiter to limit loop count --> <xsl:param name='maxiter' select='20'/> <!-- Set this up to insure against infinite loops 10 --> <!-- This template was written by Nate Austin using Sir Isaac Newton's method of finding roots --> <!-- incrementado maxiter a 20 porque para numeros grandes terminaba con el max --> <xsl:choose> <xsl:when test='$try * $try = $num or $iter > $maxiter'> <xsl:value-of select='$try'/> </xsl:when> <xsl:otherwise> <xsl:call-template name='sqrt'> <xsl:with-param name='num' select='$num'/> <xsl:with-param name='try' select='$try - (($try * $try - $num) div (2 * $try))'/> <xsl:with-param name='iter' select='$iter + 1'/> <xsl:with-param name='maxiter' select='$maxiter'/> </xsl:call-template> </xsl:otherwise> </xsl:choose> </xsl:template>
Evita que desborde la pila
<!-- +++++++++++++++++++ Template OperRecursionPuntosTrack ++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ --> <xsl:template name='OperRecursionPuntosTrack'> <!-- <xsl:param name='pTrk'/> <xsl:param name='pTrkSeg'/> --> <xsl:param name='pOperPila' select='INICIO'/> <xsl:param name='pSegmentIndex' select='number(1)'/> <xsl:param name='pSegmentTrkptList' /> <xsl:param name='pSegmentTrkptIndex' select='number(1)'/> <xsl:param name='pSegmentLength'/> <xsl:param name='pTrkptList'/> <xsl:param name='pTrkptListIndex' select='number(1)'/> <xsl:param name='pTrkptListCount' select='count($pTrkptList)'/> <xsl:param name='pTrkptAIndex' select='number(0)'/> <xsl:param name='pTrkptBIndex' select='number(1)'/> <xsl:param name='pMaxIterRecurPtTraza' select='number(10)'/> <xsl:param name='pDocParam'/> <xsl:comment>++ OperRecursionPuntosTrack ++ </xsl:comment> <!-- +++++++++++ calcula valores vTrkptAIndex, vTrkptBIndex ++++++++++ --> <xsl:variable name='vFiltraPuntos' select='$pDocParam//FiltraPuntos'/> <xsl:variable name='vTrkptAIndex'> <xsl:choose> <xsl:when test='$pOperPila = 'INICIO'> <xsl:value-of select='0'/> </xsl:when> <xsl:when test='$pSegmentIndex > 1 and $pSegmentTrkptIndex = 1'> <xsl:value-of select='$pTrkptListIndex'/> </xsl:when> <xsl:otherwise> <xsl:value-of select='$pTrkptAIndex'/> </xsl:otherwise> </xsl:choose> </xsl:variable> <xsl:variable name='vTrkptBIndex'> <xsl:choose> <xsl:when test='$pOperPila = 'INICIO'> <xsl:value-of select='1'/> </xsl:when> <xsl:when test='$pSegmentIndex > 1 and $pSegmentTrkptIndex = 1'> <xsl:value-of select='$pTrkptListIndex + 1'/> </xsl:when> <xsl:otherwise> <xsl:value-of select='$pTrkptBIndex'/> </xsl:otherwise> </xsl:choose> </xsl:variable> <!-- <xsl:call-template name='PAPB-VAVB'> <xsl:with-param name='pTrkptAIndex' select='$vTrkptAIndex'/> <xsl:with-param name='pTrkptBIndex' select='$vTrkptBIndex'/> </xsl:call-template> --> <xsl:variable name='vPila' select='concat('++ ORPTrack:', ' Pila:', $pOperPila, ' (', $pSegmentIndex,'-', $pSegmentTrkptIndex,'/',$pSegmentLength, ') ', 'Lista:(', $pTrkptListIndex, '/', $pTrkptListCount,') ', ' PAPB-VAVB:(', $pTrkptAIndex,',', $pTrkptBIndex, '-', $vTrkptAIndex,',', $vTrkptBIndex, ') ++')'/> <xsl:comment> <xsl:value-of select='$vPila'/> </xsl:comment> <!-- +++++++++++++ Crear Trackpt PA:1 +++++++++++++ --> <!-- <xsl:if test='$pOperPila = 'INICIO' '> <xsl:variable name='vTrkpt' select='$pTrkptList[$pTrkptAIndex]'/> <xsl:variable name='vExtraCmd' select='concat('PA', $pTrkptAIndex)'/> <xsl:call-template name='TrackPt'> <xsl:with-param name='pTrkptList' select='$pTrkptList'/> <xsl:with-param name='pTrkptListIndex' select='$pTrkptAIndex'/> <xsl:with-param name='pTrkptListCount' select='$pTrkptListCount'/> <xsl:with-param name='pExtraCmd' select='$vExtraCmd'/> <xsl:with-param name='pDocParam' select='$pDocParam'/> </xsl:call-template> </xsl:if> --> <!-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ --> <xsl:variable name='vCalculoValFiltro'> <xsl:if test='$pOperPila != 'SACAR' and $vFiltraPuntos ='si'> <xsl:call-template name='CalculoValFiltro'> <xsl:with-param name='pTrkptList' select='$pTrkptList'/> <xsl:with-param name='pTrkptAIndex' select='$vTrkptAIndex'/> <xsl:with-param name='pTrkptBIndex' select='$vTrkptBIndex'/> <xsl:with-param name='pDocParam' select='$pDocParam'/> </xsl:call-template> </xsl:if> </xsl:variable> <xsl:comment> <xsl:value-of select='$vCalculoValFiltro'/> </xsl:comment> <!-- bbb<xsl:value-of select='concat(' ', contains($vCalculoValFiltro, 'Aceptado'),' ')'/> --> <!-- <xsl:call-template name='TestValFiltro'> <xsl:with-param name='pTrkptAIndex' select='$vTrkptListIndex'/> <xsl:with-param name='pTrkptBIndex' select='$vTrkptListIndex + 1'/> <xsl:with-param name='vVelocidad' select='$vVelocidad'/> <xsl:with-param name='vDistancia' select='$vDistancia'/> <xsl:with-param name='vTiempo' select='$vTiempo'/> <xsl:with-param name='vAngulo' select='$vAngulo'/> <xsl:with-param name='pDocParam' select='$pDocParam'/> </xsl:call-template> --> <!-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ --> <xsl:if test='$pOperPila != 'SACAR' and $pSegmentTrkptList and $pSegmentTrkptIndex <= $pSegmentLength and $pTrkptListIndex < $pTrkptListCount and $pTrkptBIndex < $pTrkptListCount'> <xsl:if test='$vCalculoValFiltro =' or contains($vCalculoValFiltro, 'Aceptado')'> <xsl:variable name='vExtraCmd' select='concat('PB', $vTrkptBIndex)'/> <xsl:call-template name='TrackPt'> <xsl:with-param name='pTrkptList' select='$pTrkptList'/> <xsl:with-param name='pTrkptListIndex' select='$vTrkptBIndex'/> <xsl:with-param name='pTrkptListCount' select='$pTrkptListCount'/> <xsl:with-param name='pExtraCmd' select='$vExtraCmd'/> <xsl:with-param name='pDocParam' select='$pDocParam'/> </xsl:call-template> </xsl:if> </xsl:if> <!-- +++++++ ajusta indices vSegmentTrkptIndex, vTrkptListIndex +++++++ --> <xsl:if test=' $pOperPila = 'INICIO' or $pTrkptBIndex < $pTrkptListCount' > <xsl:variable name='vSegmentTrkptIndex'> <xsl:choose> <xsl:when test='$pOperPila = 'INICIO'> <xsl:value-of select='1'/> </xsl:when> <xsl:when test='$pOperPila = 'SACAR' and $pSegmentIndex > 1 and $pSegmentTrkptIndex = 1'> <xsl:value-of select='1'/> </xsl:when> <xsl:otherwise> <xsl:value-of select='$pSegmentTrkptIndex + 1'/> </xsl:otherwise> </xsl:choose> </xsl:variable> <xsl:variable name='vTrkptListIndex'> <xsl:choose> <xsl:when test='$pOperPila = 'INICIO'> <xsl:value-of select='1'/> </xsl:when> <xsl:when test='$pSegmentIndex > 1 and $pSegmentTrkptIndex = 1'> <xsl:value-of select='$pSegmentLength * ($pSegmentIndex - 1) + 1 '/> </xsl:when> <xsl:otherwise> <xsl:value-of select=' $pTrkptListIndex + 1'/> </xsl:otherwise> </xsl:choose> </xsl:variable> <!-- <xsl:comment>aaAA $vFiltraPuntos ='no' or ($vFiltraPuntos ='si' and contains($vCalculoValFiltro, 'Aceptado')) </xsl:comment> <xsl:comment>eeAA $vFiltraPuntos ='si' and contains($vCalculoValFiltro, 'Eliminado')</xsl:comment> <xsl:comment>xxAA </xsl:comment> --> <xsl:variable name='zTrkptAIndex'> <xsl:choose> <xsl:when test='($vFiltraPuntos ='si' and contains($vCalculoValFiltro, 'Aceptado')) '> <xsl:value-of select='$pTrkptBIndex'/> </xsl:when> <xsl:when test='$vFiltraPuntos ='no' or ($vFiltraPuntos ='si' and contains($vCalculoValFiltro, 'Eliminado'))'> <xsl:value-of select='$vTrkptAIndex'/> </xsl:when> <xsl:when test='$pSegmentIndex > 1 and $pSegmentTrkptIndex = 1'> <xsl:value-of select='$pSegmentLength * ($pSegmentIndex - 1) + 1 '/> </xsl:when> <xsl:otherwise> <xsl:value-of select='$vTrkptBIndex'/> </xsl:otherwise> </xsl:choose> </xsl:variable> <!-- <xsl:comment>aaBB $vFiltraPuntos ='no' or ($vFiltraPuntos ='si' and contains($vCalculoValFiltro, 'Aceptado')) </xsl:comment> <xsl:comment>eeBB $vFiltraPuntos ='si' and contains($vCalculoValFiltro, 'Eliminado')</xsl:comment> <xsl:comment>xxBB </xsl:comment> --> <xsl:variable name='zTrkptBIndex'> <xsl:choose> <xsl:when test='($vFiltraPuntos ='si' and contains($vCalculoValFiltro, 'Aceptado')) '> <xsl:value-of select='$pTrkptBIndex + 1'/> </xsl:when> <xsl:when test='$vFiltraPuntos ='no' or ($vFiltraPuntos ='si' and contains($vCalculoValFiltro, 'Eliminado'))'> <xsl:value-of select='$vTrkptBIndex + 1'/> </xsl:when> <xsl:when test='$pSegmentIndex > 1 and $pSegmentTrkptIndex = 1'> <xsl:value-of select='$pSegmentLength * ($pSegmentIndex - 1) + 1 '/> </xsl:when> <xsl:otherwise> <xsl:value-of select='$vTrkptBIndex + 1'/> </xsl:otherwise> </xsl:choose> </xsl:variable> <xsl:variable name='v1Pila' select='concat('++ despues ajuste-RPTrack:', ' Pila:', 'xxx', ' (', $pSegmentIndex,'-', $vSegmentTrkptIndex,'/',$pSegmentLength, ') ', 'Lista:(', $vTrkptListIndex, '/', $pTrkptListCount,') ', ' PAPB-ZAZB:(', $pTrkptAIndex,',', $pTrkptBIndex,'-', $zTrkptAIndex,',', $zTrkptBIndex,') ++')'/> <xsl:comment> <xsl:value-of select='$v1Pila'/> </xsl:comment> <!-- +++++++++++++++++++++ Recursion +++++++++++++++++++++++++ --> <xsl:call-template name='RecursionPuntosTrack'> <xsl:with-param name='pOperPila' select='$pOperPila'/> <xsl:with-param name='pSegmentIndex' select='$pSegmentIndex'/> <xsl:with-param name='pSegmentTrkptList' select='$pSegmentTrkptList'/> <xsl:with-param name='pSegmentTrkptIndex' select='$vSegmentTrkptIndex'/> <xsl:with-param name='pSegmentLength' select='$pSegmentLength'/> <xsl:with-param name='pTrkptList' select='$pTrkptList'/> <xsl:with-param name='pTrkptListIndex' select='$vTrkptListIndex'/> <xsl:with-param name='pTrkptListCount' select='$pTrkptListCount'/> <xsl:with-param name='pTrkptAIndex' select='$zTrkptAIndex'/> <xsl:with-param name='pTrkptBIndex' select='$zTrkptBIndex'/> <xsl:with-param name='pMaxIterRecurPtTraza' select='$pMaxIterRecurPtTraza'/> <xsl:with-param name='pDocParam' select='$pDocParam'/> </xsl:call-template> </xsl:if> <!-- +++++++++++++++++++++ fin recursion por segmentos +++++++++++++++++++ --> </xsl:template>
Si en la invocación del template para sacar de la pila, se pone el parámetro de las forma que se indica, el parámetro toma los valores valores que se indican:
Select | resultado |
' ' | vacio |
'1' | 1 |
$pTrkPtBIndex | el valor almacenado (decreciente) |
$vPB | valor almacenado en vPB |
nada | valor vacio |
Si una transformación no termina y se cancela, o se interrumpe, el archivo generado está con tamaño 0 y no se puede eliminar. Da el mensaje: está siendo utilizado por otra persona.
Para desbloquearlo,
Página generada automáticamente desde la Base de Datos: XML/ el 10/11/2010 18:27:47