FoxPress – Mayo 2003

 

      STREXTRACT()

 

http://www.fpress.com/

 

                        

Después de algunas pruebas de laboratorio tratando XML desde Fox me tuve que enfrentar con una aplicación real en un mundo real.

   Mi primera y gran sorpresa es que mientras la función CURSORTOXML es puro fox su contraria no es tal (XMLTOCURSOR) y usa el parser de Microsoft.

   Usar el Parser de Microsoft no es bueno ni malo, depende de lo que quieras hacer. Pero, en mi caso me enfrentaba a una colección de instalaciones muy variadas: no podía ni quería controlar la versión del Internet Explorer que tenían los usuarios y el Parser que usa Fox en la instrucción XMLTOCURSOR era bastante exigente con los consiguientes problemas con los usuarios.

   En el camino me encontré con varias soluciones. Una de ellas es usar algún otro Parser que pueda instalar con mi aplicación y que sea gratuito, rápido y fácil de instalar. Para esto acudí a ChilkatSoft (reconozco que ultimamente acudo a él con frecuencia) y vi que tienen un Parser Gratuito.

   Cuando ya estaba trabajando con el Parser gratuito de Chilkatsoft me tropecé con una función de FoxPro que me podía ayudar en mi trabajo que es STREXTRACT()

   Lo que yo quería es con puro código Fox (sin depender de otros productos o librerías de Microsoft) poder convertir a XML y poder convertir desde XML. La conversión a XML es fácil pero ¿Y lo contrario?

   Si tengo un fichero en XML ¿Cómo lo convierto a cursor sin usar el XMLTOCURSOR? En tu ayuda viene la función STREXTRACT() que podríamos decir que es un Parser hecho en Fox.

   El ejemplo que viene con la documentación es aplastante y te lo traslado para que lo veas:

Clear

 

USE customer && any table

?cursortoxml(0,"x",1,0,2)   && Produce variable "x" that has XML of  first 2 records of table

?x         && show the XML

xmlproc(x,0)      && Parse the XML

 

PROCEDURE xmlproc(x as String, nLev as Integer)   as void

   LOCAL cTagName, cContents, mterm

   do while .t.

      cTagName = STREXTRACT(x,"<",">")

      IF LEN(cTagName) = 0   && no tag found

         ??' ',x   && print out raw string as contents

         exit

      endif

      IF RIGHT(cTagName,1) = '/'   && like "<region/>"

         cTagName = LEFT(cTagName, LEN(cTagName)-1)

         cContents=""

         mterm = "<"+cTagName+"/>"   && "<region/>"

      else

         mterm = "</"+cTagName+">"   && "</region>"

         cContents = STREXTRACT(x,"<"+cTagName+">", mterm,1,2)

      endif

      ?REPLICATE("  ",nLev),nLev+1,PADR(cTagName,20)

      xmlproc(cContents, nLev+1)

      x = STREXTRACT(x, mterm)   && get the rest of the xml

   enddo

 

  La forma de usarla es:

 

   

STREXTRACT(cSearchExpression, cBeginDelim [, cEndDelim [, nOccurrence
[, nFlag]]]])
 

Parámetros

 

cSearchExpression

Especifica la cadena que hay que buscar.

cBeginDelim

Especifica el carácter que delimita el principio de cSearchExpression.

cEndDelim

Especifica el carácter que delimita el final de cSearchExpression.

nOccurrence

Especifica la instancia de cBeginDelim en cSearchExpression en la que se inicia la extracción.

nFlag

Especifica el tipo de controles que se colocan en la búsqueda. El número especificado en nFlags proporciona un valor de bits que determina ciertas opciones de la manera indicada en la tabla siguiente

 

Mirate la documentación para los detalles.

 

   Una Alternativa si no quieres usar el Parser Microsoft es usar el que te proporciona gratuitamente la empresa Chilkatsoft. En números anteriores de esta revista se usó el control de mensajería que entonces también era gratuito. Fruto del volumen de descargas que se produjeron el control pasó a ser de pago. El Parser que todavía cuando escribo estas líneas es gratuito te lo puedes bajar de: http://www.chilkatsoft.com/ChilkatXml.exe

 

   El parser XML de ChilkatSoft te da un API  más simplificado que el XML DOM.  El control se puede poner en un formulario y crear un objeto ChilkatXml  vacío que se puede usar como un punto de partida para cargar o crear documentos  XML. La última versión incorpora el soporte para XMLHTTP con lo que se puede usar un método HTTPPost que lo que hace es enviar a una web una página con contenido XML para su procesamiento.

 

 

 

 

 

FoxPress – Mayo de 2003

© 2003 FoxPress. All rights reserved