XMLTOCURSOR( )

2,433 views
Skip to first unread message

Eduardo Issaly

unread,
Feb 15, 2014, 9:02:12 AM2/15/14
to publice...@googlegroups.com
Hola a todos(y todas), programo en VFP9 y tengo un problema con :
=XMLTOCURSOR('00000008.xml','mitabla',512)
ya que no me convierte todo el XML, es como si hubiera un limite. Hay aluna forma de que lo convierta completamente?
 
 
 
 
 
 
 
 
 
 
 
 
 
 

César Pistiner

unread,
Feb 15, 2014, 10:39:37 PM2/15/14
to publice...@googlegroups.com
Hola Eduardo,

No recuerdo un límite a nivel registros...

Siempre corta en el mismo registro?
El útimo registro te lo pasa completo?

Probaste editar el xml y quitar el registro donde corta?

Saludos,
César

Fernando D. Bozzo

unread,
Feb 16, 2014, 5:17:38 AM2/16/14
to publice...@googlegroups.com
Me pasó en alguna ocasión, y el problema no es con el límite de registros, que no lo hay, sino con el volumen del XML, que el parser no soportaba.
Tenés que pensar que todo lo relacionado al proceso de XML está dependiendo del componente MSXML de Microsoft, con sus limitaciones.

Siempre te queda la opción de leer el XML manualmente .

Farmacia Spedaletti

unread,
Feb 16, 2014, 9:26:09 AM2/16/14
to publice...@googlegroups.com
Gracias por la respuesta. A que re referis con leerlo manualmente?
He podido hacer funcionar el xlmcursor() y lee todo correctamente , crea un cursor con los datos pero no entiendo
por que lo hacecreando distintos registros como si respetara el arbol  estructural jerarquico del XML, me lo podrias explicar?
Gracias

Fernando D. Bozzo

unread,
Feb 16, 2014, 9:34:08 AM2/16/14
to publice...@googlegroups.com
XMLTOCURSOR espera un XML generado con CURSORTOXML, o al menos con la misma estructura. El componente MSXML tiene algún límite que desconozco para procesar XML, o al menos cuando supera un determinado tamaño se cuelga.
Por eso te decía que si este fuera el caso, la otra opción es ir leyéndolo a bajo nivel, con FOPEN() y FGET() o FREAD(), e ir obteniendo los valores con STREXTRACT(), lo que pasa es que con este método vas a tener más trabajo, porque vas a tener que crear algún tipo de buffering manual para no cargar todo en la memoria, en el caso de que el XML fuera muy grande.

Si el XML no es muy grande, entonces no deberías tener los problemas que comentás, pero repito que la estructura XML que espera es la que genera CURSORTOXML. Tampoco comentaste qué tamaño tiene el XML, ni cuántos registros ni qué estructura, o sea que respecto a todo eso estamos a ciegas.

Farmacia Spedaletti

unread,
Feb 16, 2014, 9:54:13 AM2/16/14
to publice...@googlegroups.com
Si Fernando , lo paso a un crursor que es legible, lo q me confundio es en la forma q en q escribe en el cursor, algunas veces un dato en un solo campo( 100105634) y otras varios datos amontonados en en un solo campo(177904405681182554732102.97DEPAKENE                      CAPS.X 50           00Item Aprobado43973010180.00) y en un tercer registro.
Recien estoy incursionando en XLM y no conozco mucho, que seria un Tag, es un segmento de XML separado por signos que habren y cierran algo de informacion?

Fernando D. Bozzo

unread,
Feb 16, 2014, 10:17:49 AM2/16/14
to publice...@googlegroups.com
Si te pasa eso, es porque el XML no tiene la estructura esperada, y no fue generado por CursorToXML ni respetando la estructura que esa función genera. No sirve cualquier XML, ya que en un XML se pueden anidar múltiples estructuras y tablas, incluso se puede poner información desestructurada.
Básicamente en el XML los tags delimitan los datos: <tag>dato</tag>

Y las estructuras de datos a su vez están delimitadas por otros tags, por ejemplo:
<registro>
   <nombre>
Eduardo Issaly</nombre>
   <foro>Comunidad Visual FoxPro en Español</foro>
   <fecha_post>2014-02-16T15:54:01</fecha_post>
</registro>


Los tags pueden tener propiedades, por ejemplo, lo registros pueden ser así:
<registro numreg="1">
   <...datos...
>
</registro>

<registro numreg="2">
   <...datos...
>
</registro>


Y finalmente, una tabla tiene una estructura más o menos así:

<tabla>
   <registro numreg="1">
      ...

   </registro>

   <registro numreg="2">
      ...

   </registro>

   ...
</tabla>


Además, para que el XML sea válido debe tener una cabecera XML: <?xml version="1.0" encoding="UTF-8" ?>

Si tu XML se saliera de esta estructura (los nombres de mis tags son ficticios, solo para el ejemplo), por ejemplo como lo que sigue, entonces podrías tener un problema para leerlo con XmlTuCursor()

<tabla>
   <registro numreg="1">
      ...

   </registro>

   <registro numreg="2">
      ...

      <subestructura1>
         <subestructura2>dato</subestructura2>
      </subestructura1>
   </registro>

   ...
</tabla>


Si lo pensás en términos jerárquicos de tabla-registro-dato, ¿qué pinta la subestructura 1 y 2 en este caso? Nada, porque sería como una subestructura del dato, cosa que los DBFs no tienen, entonces el parser falla o simplemente ignora esa parte.
Y todo esto asumiendo que el XML es válido y que todos los tags están correctamente cerrados, si no fuera así, entonces todo tipo de problemas pueden surgir.
Para saber si el XML es válido lo podés abrir con un browser de internet (Explorer, FireFox, Chrome, etc) y ya te marcará un error si no lo es.

Te convendría leer esto, que es uno de los tutoriales que leí para aprender XML:
http://www.w3schools.com/xml/default.asp

Saludos.-

Farmacia Spedaletti

unread,
Feb 18, 2014, 2:05:28 PM2/18/14
to publice...@googlegroups.com
Hola Fernando: se supone que =XMLTOCURSOR('00000008.xml','mitabla',512) , creara una tabla que contiene todos lo campos del xml, pero no me ocurre asi con
<I<Item>
     <NroItem>1</NroItem>
</Item>
 
   el resultado es correcto como muestro mas abajo, crea el xml correcto , pero el problema esta en la tabla donde solo muestra el segundo  Item, o sea el segundo medicamento del :
<Item>
     <NroItem>2</NroItem>
</Item>
 
es que cada Item seberia tener un nombre diferente para que se los pueda mostrar en dos campos distintos???
 
<DetalleReceta>
<Item>
 <NroItem>1</NroItem>
 <CodBarras>7795378001324</CodBarras>
 <CodTroquel>3367601</CodTroquel>
 <Alfabeta/>
 <Kairos/>
 <Codigo/>
 <ImporteUnitario>35.02</ImporteUnitario>
 <Descripcion>T4 MONTPELLIER 100100 MCG COMP.X 50 </Descripcion>
 <CodRta>00</CodRta>
 <MensajeRta>Item Aprobado</MensajeRta>
 <CodAutorizacion>439854</CodAutorizacion>
 <CantidadSolicitada>1</CantidadSolicitada>
 <CantidadAprobada>01</CantidadAprobada>
 <PorcentajeCobertura>80.00</PorcentajeCobertura>
 <ImporteACargoAfiliado/>
 <ImporteCobertura/>
 <ExcepcionPrescripcion/>
 <Diagnostico/>
 <DosisDiaria/>
 <DiasTratamiento/>
 <Generico/>
 <CodConflicto/>
 <CodIntervencion/>
 <CodAccion/>
 <CodSeveridad/>
 </Item>
<Item>
 <NroItem>2</NroItem>
 <CodBarras>7795338013435</CodBarras>
 <CodTroquel>4605352</CodTroquel>
 <Alfabeta/>
 <Kairos/>
 <Codigo/>
 <ImporteUnitario>34.80</ImporteUnitario>
 <Descripcion>PANTUS 20 BALIARDACOMP.GASTRORRES.X 15 </Descripcion>
 <CodRta>00</CodRta>
 <MensajeRta>Item Aprobado</MensajeRta>
 <CodAutorizacion>439855</CodAutorizacion>
 <CantidadSolicitada>1</CantidadSolicitada>
 <CantidadAprobada>01</CantidadAprobada>
 <PorcentajeCobertura>50.00</PorcentajeCobertura>
 <ImporteACargoAfiliado/>
 <ImporteCobertura/>
 <ExcepcionPrescripcion/>
 <Diagnostico/>
 <DosisDiaria/>
 <DiasTratamiento/>
 <Generico/>
 <CodConflicto/>
 <CodIntervencion/>
 <CodAccion/>
 <CodSeveridad/>
 </Item>
 </DetalleReceta>
 </MensajeADESFA>

Fernando D. Bozzo

unread,
Feb 18, 2014, 2:32:45 PM2/18/14
to publice...@googlegroups.com
Eduardo, ¿cómo estás creando el XML? ¿Probaste a crear un XML con CURSORTOXML de la tabla que te interesa, para saber lo que está esperando? Lo de que espera una estructura XML específica te lo puse varias veces en las respuestas anteriores.

Farmacia Spedaletti

unread,
Feb 18, 2014, 3:05:11 PM2/18/14
to publice...@googlegroups.com
asi es como creo el xml:
<DetalleReceta>
        <Item>
            <NroItem>1</NroItem>
            <CodBarras>7795338013572</CodBarras>
            <CodTroquel>4656841</CodTroquel>
            <Alfabeta></Alfabeta>
            <Kairos></Kairos>
            <Codigo></Codigo>
            <ImporteUnitario>53.16</ImporteUnitario>
            <CantidadSolicitada>1</CantidadSolicitada>
            <PorcentajeCobertura></PorcentajeCobertura>
            <CodPreautorizacion></CodPreautorizacion>
            <ImporteCobertura>26.58</ImporteCobertura>
            <ExcepcionPrescripcion></ExcepcionPrescripcion>
            <Diagnostico></Diagnostico>
            <DosisDiaria></DosisDiaria>
            <DiasTratamiento></DiasTratamiento>
            <Generico></Generico>
            <CodConflicto></CodConflicto>
            <CodIntervencion></CodIntervencion>
            <CodAccion></CodAccion>
        </Item>
        <Item>
            <NroItem>2</NroItem>
            <CodBarras>7795338013572</CodBarras>
            <CodTroquel>4656841</CodTroquel>
            <Alfabeta></Alfabeta>
            <Kairos></Kairos>
            <Codigo></Codigo>
            <ImporteUnitario>53.16</ImporteUnitario>
            <CantidadSolicitada>1</CantidadSolicitada>
            <PorcentajeCobertura></PorcentajeCobertura>
            <CodPreautorizacion></CodPreautorizacion>
            <ImporteCobertura>26.58</ImporteCobertura>
            <ExcepcionPrescripcion></ExcepcionPrescripcion>
            <Diagnostico></Diagnostico>
            <DosisDiaria></DosisDiaria>
            <DiasTratamiento></DiasTratamiento>
            <Generico></Generico>
            <CodConflicto></CodConflicto>
            <CodIntervencion></CodIntervencion>
            <CodAccion></CodAccion>
        </Item>
    </DetalleReceta>

Fernando D. Bozzo

unread,
Feb 18, 2014, 3:07:00 PM2/18/14
to publice...@googlegroups.com
Entonces no comprobaste nada de lo que te puse.

Farmacia Spedaletti

unread,
Feb 19, 2014, 3:18:53 AM2/19/14
to publice...@googlegroups.com, Jose Paez
aver el tema es el siguiente Farmalink me manda un xlm de respuesta('00000008.xml') , yo no lo creo, al aplicar: =XMLTOCURSOR('00000008.xml','mitabla',512)
solo me desplega una columna y no todas solo me pone una columna con titulo Item y como registro me pone el ultimo codigo de la tabla con la descripcion en una sola:
 
ARCHIVO DE IDA AL LAUNCHER:
 
<?xml version="1.0" ?>
<MensajeADESFA Version="1.0">
<EncabezadoMensaje>
<TipoMsj>200</TipoMsj>
<CodAccion>290020</CodAccion>
             <IdMsj><<NROMRNSAJE>></IdMsj>
<InicioTrx>
             <Fecha><<Thisform.fechahoy>></Fecha>
             <Hora><<Thisform.horahoy>></Hora>
</InicioTrx>
<Terminal>
<Tipo>PC</Tipo>
<Numero>1</Numero>
</Terminal>
<Software>
<Nombre>SWH_CLIENTE</Nombre>
<Version />
</Software>
<Validador>
<Nombre />
<Version />
</Validador>
<VersionMsj />
<Prestador>
<Cuit />
<Sucursal />
<RazonSocial />
      <Codigo>99010584003</Codigo>
</Prestador>
<SetCaracteres />
</EncabezadoMensaje>
<EncabezadoReceta>
<Prescriptor>
<Apellido />
<Nombre />
<TipoMatricula>N</TipoMatricula>
<Provincia />
           <NroMatricula><<Thisform.nromatricula>></NroMatricula>
           <TipoPrescriptor><<Thisform.tipomatricula>></TipoPrescriptor>
<Cuit />
<Especialidad />
</Prescriptor>
<Beneficiario>
<TipoDoc />
<NroDoc />
<Apellido />
<Nombre />
<Sexo>M</Sexo>
<FechaNacimiento />
<Parentesco />
<EdadUnidad />
<Edad />
</Beneficiario>
<Financiador>
             <Codigo>8888</Codigo>
<Cuit />
<Sucursal />
</Financiador>
<Credencial>
            <Numero><<Thisform.nroafiliado>></Numero>
<Track />
<Version />
<Vencimiento />
<ModoIngreso>A</ModoIngreso>
<EsProvisorio>0</EsProvisorio>
<Plan />
</Credencial>
<CoberturaEspecial />
<Preautorizacion>
<Codigo />
<Fecha />
</Preautorizacion>
         <FechaReceta>20140210</FechaReceta>
<Dispensa>
               <Fecha><<Thisform.fechareceta>></Fecha>
<Hora>16:20:00</Hora>
</Dispensa>
<Formulario>
<Fecha />
<Tipo />
                <Numero><<Thisform.nroreceta>></Numero>
<Serie />
</Formulario>
<TipoTratamiento>N</TipoTratamiento>
<Diagnostico />
<Institucion>
<Codigo />
<Cuit />
<Sucursal />
</Institucion>
<Retira>
<Apellido />
<Nombre />
<TipoDoc />
<NroDoc />
<NroTelefono />
</Retira>
</EncabezadoReceta>
<DetalleReceta>
                      <Item>
<NroItem>1</NroItem>
<CodBarras><<thisform.codbar1>></CodBarras>
<CodTroquel><<thisform.codtroquel1>></CodTroquel>
<Alfabeta />
<Kairos />
<Codigo />
<ImporteUnitario>0.00</ImporteUnitario>
<CantidadSolicitada><<thisform.cant1>></CantidadSolicitada>
<PorcentajeCobertura>0.00</PorcentajeCobertura>
<CodPreautorizacion />
<ImporteCobertura>0.00</ImporteCobertura>
<ExcepcionPrescripcion />
<Diagnostico />
<DosisDiaria />
<DiasTratamiento />
<Generico />
<CodConflicto />
<CodIntervencion />
<CodAccion />
              </Item>                      
                         <Item>
<NroItem>2</NroItem>
<CodBarras><<thisform.codbar2>></CodBarras>
<CodTroquel><<thisform.codtroquel2>></CodTroquel>
<Alfabeta />
<Kairos />
<Codigo />
<ImporteUnitario>0.00</ImporteUnitario>
<CantidadSolicitada><<thisform.cant2>></CantidadSolicitada>
<PorcentajeCobertura>0.00</PorcentajeCobertura>
<CodPreautorizacion />
<ImporteCobertura>0.00</ImporteCobertura>
<ExcepcionPrescripcion />
<Diagnostico />
<DosisDiaria />
<DiasTratamiento />
<Generico />
<CodConflicto />
<CodIntervencion />
<CodAccion />                          
                           </Item>
</DetalleReceta>
</MensajeADESFA>

ARCHIVO DEVUELTO POR FARMALINK
 
<MensajeADESFA Version="1.0">
<EncabezadoMensaje>
<Rta>
 <CodRtaGeneral>00</CodRtaGeneral>
 <Descripcion>TRANSACCION APROBADA</Descripcion>
 <Mensaje>FARMALINK - UN SERVICIO DE FARMALINK </Mensaje>
 </Rta>
 <NroReferencia>000100105805</NroReferencia>
 <TipoMsj>210</TipoMsj>
 <CodAccion>290020</CodAccion>
 <IdMsj>346</IdMsj>
<InicioTrx>
 <Fecha>20140219</Fecha>
 <Hora>041705</Hora>
 </InicioTrx>
<Terminal>
 <Tipo>PC</Tipo>
 <Numero>1</Numero>
 </Terminal>
<Prestador>
 <Cuit/>
 <Sucursal/>
 <RazonSocial>SPEDALETTI</RazonSocial>
 <Codigo>99010584003</Codigo>
 <Direccion/>
 <CodParaFinanciador>03004586</CodParaFinanciador>
 </Prestador>
 <SetCaracteres/>
 </EncabezadoMensaje>
<EncabezadoReceta>
<Prescriptor>
 <Apellido/>
 <Nombre/>
 <TipoMatricula>N</TipoMatricula>
 <Provincia/>
 <NroMatricula>00000123</NroMatricula>
 <TipoPrescriptor>M</TipoPrescriptor>
 <Cuit/>
 <Especialidad/>
 </Prescriptor>
<Beneficiario>
 <TipoDoc/>
 <NroDoc/>
 <Apellido>ATOS IMED PRUEBA</Apellido>
 <Nombre>ATOS IMED PRUEBA</Nombre>
 <Sexo>M</Sexo>
 <FechaNacimiento/>
 <Parentesco/>
 <EdadUnidad/>
 <Edad>94</Edad>
 </Beneficiario>
<Financiador>
 <Codigo>8888</Codigo>
 <Cuit/>
 <Sucursal/>
 <RazonSocial>PAMI</RazonSocial>
 <Direccion>PERU 169 CAPITAL FEDERAL</Direccion>
 </Financiador>
<Credencial>
 <Numero>4111093947500500</Numero>
 <Version/>
 <Vencimiento/>
 <ModoIngreso>A</ModoIngreso>
 <EsProvisorio>0</EsProvisorio>
 <Plan/>
 </Credencial>
 <CoberturaEspecial/>
<Preautorizacion>
 <Codigo/>
 <Fecha/>
 </Preautorizacion>
 <FechaReceta>20140210</FechaReceta>
<Formulario>
 <Fecha/>
 <Tipo/>
 <Numero>0003500873914</Numero>
 <Serie/>
 </Formulario>
 <TipoTratamiento>N</TipoTratamiento>
 <Diagnostico/>
<Institucion>
 <Codigo/>
 <Cuit/>
 <Sucursal/>
 </Institucion>
<Retira>
 <Apellido/>
 <Nombre/>
 <TipoDoc/>
 <NroDoc/>
 <NroTelefono/>
 </Retira>
<RtaAdicional>
<Linea>
 <Codigo>91</Codigo>
 <Mensaje>PRESCRIPTOR NO IDENTIFICADO</Mensaje>
 </Linea>
 </RtaAdicional>
 </EncabezadoReceta>
<DetalleReceta>
<Item>
 <NroItem>1</NroItem>
 <CodBarras>7792183100266</CodBarras>
 <CodTroquel>0349262</CodTroquel>
 <Alfabeta/>
 <Kairos/>
 <Codigo/>
 <ImporteUnitario>18.58</ImporteUnitario>
 <Descripcion>ATENOLOL GADOR50 MG COMP.X 28 </Descripcion>
 <CodRta>00</CodRta>
 <MensajeRta>Item Aprobado</MensajeRta>
 <CodAutorizacion>439887</CodAutorizacion>
 <CantidadSolicitada>1</CantidadSolicitada>
 <CantidadAprobada>01</CantidadAprobada>
 <PorcentajeCobertura>80.00</PorcentajeCobertura>
 <ImporteACargoAfiliado/>
 <ImporteCobertura/>
 <ExcepcionPrescripcion/>
 <Diagnostico/>
 <DosisDiaria/>
 <DiasTratamiento/>
 <Generico/>
 <CodConflicto/>
 <CodIntervencion/>
 <CodAccion/>
 <CodSeveridad/>
 </Item>
<Item>
 <NroItem>2</NroItem>
 <CodBarras>7795345003665</CodBarras>
 <CodTroquel>2844723</CodTroquel>
 <Alfabeta/>
 <Kairos/>
 <Codigo/>
 <ImporteUnitario>73.01</ImporteUnitario>
 <Descripcion>LOTRIAL10 MG COMP.X 50 </Descripcion>
 <CodRta>00</CodRta>
 <MensajeRta>Item Aprobado</MensajeRta>
 <CodAutorizacion>439888</CodAutorizacion>
 <CantidadSolicitada>1</CantidadSolicitada>
 <CantidadAprobada>01</CantidadAprobada>
 <PorcentajeCobertura>80.00</PorcentajeCobertura>
 <ImporteACargoAfiliado/>
 <ImporteCobertura/>
 <ExcepcionPrescripcion/>
 <Diagnostico/>
 <DosisDiaria/>
 <DiasTratamiento/>
 <Generico/>
 <CodConflicto/>
 <CodIntervencion/>
 <CodAccion/>
 <CodSeveridad/>
 </Item>
 </DetalleReceta>
 </MensajeADESFA>
 
 
=XMLTOCURSOR('00000008.xml','mitabla',512)  ME DEVUELVE SOLAMENTE
 
Item>
 <NroItem>2</NroItem>
 <CodBarras>7795345003665</CodBarras>
 <CodTroquel>2844723</CodTroquel>
 <Alfabeta/>
 <Kairos/>
 <Codigo/>
 <ImporteUnitario>73.01</ImporteUnitario>
 <Descripcion>LOTRIAL10 MG COMP.X 50 </Descripcion>
 <CodRta>00</CodRta>
 <MensajeRta>Item Aprobado</MensajeRta>
 <CodAutorizacion>439888</CodAutorizacion>

César Pistiner

unread,
Feb 19, 2014, 7:18:11 AM2/19/14
to publice...@googlegroups.com
Ahora esta más claro tu problema...

Con XMLToCursor() no lo vas a poder resolver. Vas a tener que usar MSXML.

Este link te puede ayudar.

Saludos,
César

Farmacia Spedaletti

unread,
Feb 19, 2014, 2:21:10 PM2/19/14
to publice...@googlegroups.com
cFile = "C:\Valida\Imed\Rta\00000009.xml"
adapter = CREATEOBJECT("XMLAdapter")
adapter.LoadXML(cFile,.T.)
adapter.Tables(1).ToCursor()
...

a que se refiere este error?:

El índice o expresión proporcionado no coincide con ninguno de los que corresponden a un miembro de la colección. Asegúrese de proporcionar un índice válido o una expresión para un miembro existente.
 
cFile = "C:\Valida\Imed\Rta\00000009.xml"
adapter = CREATEOBJECT("XMLAdapter")
adapter.LoadXML(cFile,.T.)
adapter.Tables(1).ToCursor()
...

a que se refiere este error?:

El índice o expresión proporcionado no coincide con ninguno de los que corresponden a un miembro de la colección. Asegúrese de proporcionar un índice válido o una expresión para un miembro existente.
 
 
Sent: Wednesday, February 19, 2014 9:18 AM
Subject: Re: [vfp] Re: XMLTOCURSOR( )

Fernando D. Bozzo

unread,
Feb 19, 2014, 2:32:23 PM2/19/14
to publice...@googlegroups.com
Hola Eduardo:

Ese XML nunca lo vas a poder meter en una tabla: ni con XmlToCursor, ni con XmlAdapter, ni con un parser Java ni empujando con camión.
No importa de cuántas maneras lo intentes, estás fallando en lo más básico, que es entender lo que intentás hacer. Y no lo podés entender porque no leíste lo que te linkee sobre XML, con lo cuál seguís pensando que un XML con unos "tags" con un nombre que tienen "datos" y listo, ni tampoco exportaste una tabla ("esa" tabla) a XML para ver que espera Fox, por lo tanto, como veo que persistís en tu idea y que no haces ni caso de lo que se explica, te deseo mucha suerte. Yo desisto.

Saludos.-

César Pistiner

unread,
Feb 19, 2014, 3:55:22 PM2/19/14
to publice...@googlegroups.com
+1 para Fernando!

Saludos,
César

Farmacia Spedaletti

unread,
Mar 6, 2014, 9:04:30 AM3/6/14
to publice...@googlegroups.com
Hola !!!. Bien  todo lo que he probado en VFP no me resulto para pasar un XML a una tabla en forma completa, o sea lo hace parcialmente ,asi que he decidido probar hacerlo como texto...pero, siempre hay un pero, me encuentro con que VFP ignora los XML con la funcion : If File("mi archivo.xml"), simpre me da que no existe, reconoce todo lo que hay en ese directorio menos los benditos XML y estoy seguro de estar posicionado en el directorio correspondiente. Sigo porfiando por que tengo necesidad de actualizar un programa funcionando hace tiempo y del cual dependo para trabajar. Le agradeceria a alguien que si puede me pase algun dato sobre esto. Me estara faltando un SP, VFP no va con XML, o estoy haciendo las cosas mal.
 
 
Sent: Wednesday, February 19, 2014 9:18 AM
Subject: Re: [vfp] Re: XMLTOCURSOR( )

Miguel Canchas

unread,
Mar 6, 2014, 9:16:52 AM3/6/14
to publice...@googlegroups.com

Raro, a mi si me muestra

 

 

IF FILE("D:\R01.xml")

      ?"EXISTE"

ENDIF

 

 

 

MK

francisco prieto

unread,
Mar 6, 2014, 9:32:04 AM3/6/14
to publice...@googlegroups.com
Pone asi...

 If File('"mi archivo.xml"')

Saludos,

Pancho
Córdoba

francisco prieto

unread,
Mar 6, 2014, 10:06:43 AM3/6/14
to publice...@googlegroups.com
Solo por probar hace lo siguiente

if file(getfile())

y hace la prueba en XP y Windows 8

y comentame.

Gracias,

Pancho
Córdoba


El 6 de marzo de 2014, 12:04, Farmacia Spedaletti <farmacias...@traslasierra.com> escribió:
Hola pancho, la triple comilla me da el mismo resultado, ahora bien, resulta que funciona en XP y no en windows8!!!
IF FILE("C:\00000009.xml")
 
      ?"EXISTE"
     
      ELSE
     
      ?"NO EXISTE"
 
ENDIF

Farmacia Spedaletti

unread,
Mar 6, 2014, 11:37:54 AM3/6/14
to publice...@googlegroups.com
Pancho: si funciona, pero como puedo evitar el getfile(), no es muy productivo estar en un mostrador abriendo ventanas, se te ocurre algo  mas automatico?
 
Eduardo
Mina Clavero – Cordoba

César Pistiner

unread,
Mar 6, 2014, 12:06:46 PM3/6/14
to publice...@googlegroups.com
Si te funcionó con el GetFile, podrías compartirnos lo siguiente:

Local lcFile As String

lcFile = GetFile() && selecciona el archivo XML en cuestión...

? lcFile

¿ Qué contenido tiene la variable lcFile ?

Saludos,
César

Farmacia Spedaletti

unread,
Mar 6, 2014, 12:27:33 PM3/6/14
to publice...@googlegroups.com
Hola Cesar:esto tiene la variable...
? lcFile =
C:\0000000009.XML.XML

César Pistiner

unread,
Mar 6, 2014, 12:34:45 PM3/6/14
to publice...@googlegroups.com
Jajaja y ahí esta el problema no?

Qué te devuelve File("C:\0000000009.XML.XML") ??

Farmacia Spedaletti

unread,
Mar 6, 2014, 1:03:04 PM3/6/14
to publice...@googlegroups.com
QUE SI EXISTE!!!!.......jajaja, Gracias , ahora a “tallar” el XML como texto....sigo en linea.

Farmacia Spedaletti

unread,
Mar 6, 2014, 1:29:54 PM3/6/14
to publice...@googlegroups.com
Aca va otra: no lo abre Fopen(), que se te ocurre?

Si FOPEN( ) abre correctamente el archivo, devolverá el número del identificador de archivo. Si no se puede abrir el archivo, FOPEN( ) devolverá –1.

f1=Sys(5)+"\Valida\Imed\Rta\00000009.xml.xml"
    N = Fopen(f1)
?Fopen(f1)  = -1

francisco prieto

unread,
Mar 6, 2014, 2:05:41 PM3/6/14
to publice...@googlegroups.com
Proba con filetostr() y compartime.

Saludos,

Pancho
Córdoba

Farmacia Spedaletti

unread,
Mar 6, 2014, 6:29:13 PM3/6/14
to publice...@googlegroups.com
YA FALTA MENOS...este codigo me da error
 
CLEAR
 
f1=Sys(5)+"\Valida\Imed\Rta\00000009.xml"
 
f1=FILETOSTR("00000009.xml.xml")
?f1
N = Fopen (&f1).......ERROR=falta ) en el nombre de la  funcion

francisco prieto

unread,
Mar 6, 2014, 6:34:58 PM3/6/14
to publice...@googlegroups.com
Proba asi...

f1=Sys(5)+"\Valida\Imed\Rta\00000009.xml.xml"
N = Fopen (f1)

Saludos,
Pancho
Córdoba


El 6 de marzo de 2014, 20:29, Farmacia Spedaletti <farmacias...@traslasierra.com> escribió:
YA FALTA MENOS...este codigo me da error
 
CLEAR
 
f1=Sys(5)+"\Valida\Imed\Rta\00000009.xml.xml"

Farmacia Spedaletti

unread,
Mar 6, 2014, 7:27:50 PM3/6/14
to publice...@googlegroups.com
f1=Sys(5)+"\Valida\Imed\Rta\00000009.xml.xml"
 
N = Fopen (f1) ............... no lo abre, por eso uso : f1=FILETOSTR("00000009.xml.xml") ....Devuelve el contenido de un archivo como una cadena de caracteres.
 
If Fopen(f1)=-1
    Wait Window "No fue abierto" Nowait
Endif

francisco prieto

unread,
Mar 7, 2014, 4:27:47 AM3/7/14
to publice...@googlegroups.com
Ok... pero Fopen solo abre nombres de archivo, por eso si usas FileToStr ya no tenes que usar Fopen...

Por otra parte estas poniendo argumentos distintos...

No es lo mismo...

f1=Sys(5)+"\Valida\Imed\Rta\00000009.xml.xml"
N = Fopen (f1)

que...

 f1=FILETOSTR("00000009.xml.xml")

Para que la prueba sea la misma debería hacer...

lcContArch=FILETOSTR(f1)

Y ahí confirmame si lo abre, es decir si la variable lcContArch trae el contenido, porque si no lo trae va a significar que la ruta en f1 es incorrecta.

Saludos,
Pancho
Córdoba

César Pistiner

unread,
Mar 7, 2014, 8:31:16 AM3/7/14
to publice...@googlegroups.com
Coincido con nuestro querido Pancho,

¿Para qué necesitas el FOpen() si con el FileToStr() ya tenes el contenido del archivo?

Saludos,
César

Farmacia Spedaletti

unread,
Mar 7, 2014, 1:08:32 PM3/7/14
to publice...@googlegroups.com
Bueno aca estoy de nuevo. Si, con FileToStr() la subo a variable de memoria, cdo usaba Fopen , recorria el archivo con Fread( N, 1 )   ( Leo un caracter del archivo original y avanzo 1) y cdo encontraba un signo separador , subia el segmento acumulado al regitro de una tabla (todo esto con Do While Not Feof), ahora como hago lo mismo con la variable de memoria?

César Pistiner

unread,
Mar 7, 2014, 1:33:54 PM3/7/14
to publice...@googlegroups.com
Por lo que me comentas tu intención es bajar eso a una tabla no?

Si es así, chusmea el link que te pasé en los primeros post, te va a ser mucho más fácil de esa forma.

Saludos,
César

Farmacia Spedaletti

unread,
Mar 7, 2014, 1:52:47 PM3/7/14
to publice...@googlegroups.com
Exacto, letra por letra y asi segmento por segmento  a una tabla.
Ahora te pido disculpas pero no encuentro el link , si es este no se abre:...

“ Ahora esta más claro tu problema...

Con XMLToCursor() no lo vas a poder resolver. Vas a tener que usar MSXML.

Este link te puede ayudar.”

...es este?



Saludos,
César

César Pistiner

unread,
Mar 7, 2014, 1:58:37 PM3/7/14
to publice...@googlegroups.com
Si, ese mismo es...

¿No pudiste leer el XML con eso?

Mmm... si queres, mandame el archivo por email y cuando tenga un tiempito lo pruebo si?

Saludos,
César

francisco prieto

unread,
Mar 7, 2014, 1:58:17 PM3/7/14
to publice...@googlegroups.com
Disculpen que me meta chicos... pero en el caso que le fox no lea el XML pueden parsear con StrExtract, por ejemplo...

lnCad=5
lcCadenaError=Strextract(cTexto,'<Error>','</Error>',lnCad,1)

Con esto extraigo el texto de la quinta vez que aparece <Error>...</Error>. El último parametro (1) le dice que no sea case sensitive.

Saludos,

Pancho
Córdoba


El 7 de marzo de 2014, 15:52, Farmacia Spedaletti <farmacias...@traslasierra.com> escribió:

César Pistiner

unread,
Mar 7, 2014, 2:01:44 PM3/7/14
to publice...@googlegroups.com
Metase nomás Pancho que hay lugar!

Uff me había olvidado del StrExtract !!

Es una buena opción, igual me queda la duda de por qué no lo lee...

Christian López Gómez

unread,
Mar 11, 2014, 10:45:25 PM3/11/14
to publice...@googlegroups.com

Hola a todos, 

Alguien tiene un ejemplo de como generar una factura. Cdfi o electrónica para mexico,.

...

Farmacia Spedaletti

unread,
Mar 12, 2014, 7:08:12 AM3/12/14
to publice...@googlegroups.com
Agradezco la ayuda a Cesar y Pancho que  siempre contestaron mis a  dudas.
En realidad Fopen si abre el archivo 00000009.xml, y lo hace tantas veces como quieras si la cerras con Fclose() !!!
 
f1=Sys(5)+"\Valida\Imed\Rta\00000009.xml"
N=Fopen(f1)
 
Wait Window "FOPEN ABRIO EL ARCHIVO?" + Str(N) &&si el valor es -1 , no lo abrio
 
*oVoz = Createobject("SAPI.SpVoice")
*oVoz.Speak(‘Se abrio el arcivo xml')
 
Fclose( N )
 
...luego lo lees , lo recorres y lo cargas a una tabla:
 
Do While Not Feof( N )
 
    letra=letra + c
    c = Fread( N, 1 )           && Leo un caracter del archivo original y avanzo 1
 
    If Asc(c)=60 &&<<<<<<<<
 
        Append Blank In mitablarpta
 
        Replace In mitablarpta rta With Substr(Alltrim(letra),2)
        letra=" "
 
        Loop
    Endif
 
Enddo
 
Fclose( N )

francisco prieto

unread,
Mar 12, 2014, 7:25:39 AM3/12/14
to publice...@googlegroups.com
jajaja!

Descartaba que siempre usabas fclose despues de un FOPEN.

Saludos,

Pancho
Córdoba

César Pistiner

unread,
Mar 12, 2014, 7:45:18 AM3/12/14
to publice...@googlegroups.com
Justamente ayer me estaba preguntando qué pasó con ese que quería leer el XML jaja

Bueno me alegro que lo solucionaste.

Saludos,
César


El 12 de marzo de 2014, 8:08, Farmacia Spedaletti <farmacias...@traslasierra.com> escribió:

Luis Maria Guayan

unread,
Mar 12, 2014, 7:51:13 AM3/12/14
to publice...@googlegroups.com
Mira en este grupo que muy bueno y es específico para ese tema:

-- vfp-factura-electronica-mexico --
http://groups.google.com/group/vfp-factura-electronica-mexico


Luis María Guayán
Tucumán, Argentina
_________________________
http://www.PortalFox.com
Nada corre como un zorro
_________________________

Farmacia Spedaletti

unread,
Mar 6, 2014, 10:04:27 AM3/6/14
to publice...@googlegroups.com
Hola pancho, la triple comilla me da el mismo resultado, ahora bien, resulta que funciona en XP y no en windows8!!!
IF FILE("C:\00000009.xml")
 
      ?"EXISTE"
     
      ELSE
     
      ?"NO EXISTE"
 
ENDIF

Farmacia Spedaletti

unread,
Mar 12, 2014, 12:11:45 PM3/12/14
to publice...@googlegroups.com
si, ya resolvi el tema de XML y VFP , todo un engorro, no?  (-:
Reply all
Reply to author
Forward
0 new messages