Hola,
Sobre como leer la respuesta XML de Factura Electrónica una alternativa a
STREXTRACT es trabajar con el objeto MSXML.DOMDocumentLes paso un ejemplo en
como se puede hacer un objeto jerárquico que respete la estructura del XML y
revisar sus valores
SaludosMauricio
** ejemplo en VFP de como a partir de una estructura XML* generar un objeto
jerarquico* usando "MSXML.DOMDocument"* Mauricio Pistiner*LOCAL o
o = CREATEOBJECT('RespuestaAFIP')o.cXML = o.Mock_XML()o.ProcesarRespuesta()
WITH
o.soap_envelope.soap_body.fecompconsultarresponse.fecompconsultarresult.ResultGet
? 'Concepto = '+.Concepto.Valor ? 'DocTipo = '+.DocTipo.Valor ? 'ImpTotal =
'+.ImpTotal.Valor ? 'ImpTotConc = '+.ImpTotConc.Valor ? 'Concepto =
'+.Concepto.Valor ? 'DocTipo = '+.DocTipo.Valor ? 'DocNro = '+.DocNro.Valor ?
'CbteDesde = '+.CbteDesde.Valor ? 'CbteHasta = '+.CbteHasta.Valor ? 'CbteFch =
'+.CbteFch.Valor ? 'ImpTotal = '+.ImpTotal.Valor ? 'ImpTotConc =
'+.ImpTotConc.Valor ? 'ImpNeto = '+.ImpNeto.Valor ? 'ImpOpEx = '+.ImpOpEx.Valor
? 'ImpTrib = '+.ImpTrib.Valor ? 'ImpIVA = '+.ImpIVA.Valor ? 'FchServDesde =
'+.FchServDesde.Valor ? 'FchServHasta = '+.FchServHasta.Valor ? 'FchVtoPago =
'+.FchVtoPago.Valor ? 'MonId = '+.MonId.Valor ? 'MonCotiz = '+.MonCotiz.Valor *
* ... *ENDWITH
*********************DEFINE CLASS RespuestaAfip AS SESSION
cXML = ''
******************** * PROCEDURE INIT
ENDPROC
******************** * PROCEDURE ProcesarRespuesta LOCAL cText, oXML, cValores
oXML = CREATEOBJECT("MSXML.DOMDocument")
IF oXML.LOADXML(THIS.cXML) THIS.ProcesaNodos(oXML.childNodes,THIS) ENDIF
ENDPROC
******************** * PROCEDURE ProcesaNodos LPARAMETERS Nodos AS
MSXML.IXMLDOMNodeList, oObj LOCAL oNodo AS MSXML.IXMLDOMNode, cNombre
#DEFINE NODE_ELEMENT 1 #DEFINE NODE_ATTRIBUTE 2 #DEFINE NODE_TEXT 3
FOR EACH oNodo IN Nodos IF oNodo.nodeType = NODE_TEXT
ADDPROPERTY(oObj,'Valor',TRANSFORM(oNodo.nodeValue)) ENDIF IF
oNodo.hasChildNodes cNombre = STRTRAN(oNodo.nodeName,':','_')
ADDPROPERTY(oObj,cNombre,CREATEOBJECT('empty')) THIS.ProcesaNodos(
oNodo.childNodes, EVALUATE('oObj.'+cNombre)) ENDIF ENDFOR
ENDPROC
******************** * PROCEDURE Mock_XML LOCAL cText
TEXT TO cText NOSHOW<soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <soap:Body>
<FECompConsultarResponse xmlns="http://ar.gov.afip.dif.FEV1/">
<FECompConsultarResult> <ResultGet>
<Concepto>2</Concepto> <DocTipo>80</DocTipo>
<DocNro>30999999997</DocNro> <CbteDesde>1</CbteDesde>
<CbteHasta>1</CbteHasta> <CbteFch>20150628</CbteFch>
<ImpTotal>33.15</ImpTotal> <ImpTotConc>0</ImpTotConc>
<ImpNeto>20</ImpNeto> <ImpOpEx>10</ImpOpEx>
<ImpTrib>0</ImpTrib> <ImpIVA>3.15</ImpIVA>
<FchServDesde>20150601</FchServDesde>
<FchServHasta>20150630</FchServHasta>
<FchVtoPago>20150630</FchVtoPago> <MonId>PES</MonId>
<MonCotiz>1</MonCotiz> <Iva> <AlicIva>
<Id>4</Id> <BaseImp>10</BaseImp>
<Importe>1.05</Importe> </AlicIva>
<AlicIva> <Id>5</Id>
<BaseImp>10</BaseImp> <Importe>2.1</Importe>
</AlicIva> </Iva> <Resultado>A</Resultado>
<CodAutorizacion>99999999999999</CodAutorizacion>
<EmisionTipo>CAE</EmisionTipo> <FchVto>20151212</FchVto>
<FchProceso>20150628160914</FchProceso> <PtoVta>5</PtoVta>
<CbteTipo>1</CbteTipo> </ResultGet>
</FECompConsultarResult> </FECompConsultarResponse>
</soap:Body></soap:Envelope>ENDTEXT
RETURN cText
ENDPROC
ENDDEFINE