Hola,
Ahí va una versión revisada para que tome TAGs con estructuras repetitivas como 
<Iva></Iva>
SaludosMauricio

** ejemplo en VFP de como a partir de una estructura XML* generar un objeto 
jerarquico* usando "MSXML.DOMDocument"** Mauricio Pistiner** Versión revisada 
para que tome estructuras repetitivas*LOCAL o
o = CREATEOBJECT('RespuestaAFIP')o.cXML = o.Mock_XML()o.ProcesarRespuesta()
WITH 
o.soap_envelope.soap_body.fecompconsultarresponse.fecompconsultarresult.ResultGet
 IF .Resultado.Valor ='A' ? '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 ? ? 'Array IVA' nOrd = 
IIF(PEMSTATUS(.iva,'AlicIva1',5),1,0) DO WHILE TYPE('.iva') = 'O' AND 
PEMSTATUS(.iva,ALLTRIM('AlicIva'+TRANSFORM(nOrd,'@Z 9')),5) ? 
'IvaAlic'+TRANSFORM(nOrd,'@Z 9') WITH 
EVALUATE('.iva.AlicIva'+TRANSFORM(nOrd,'@Z 9')) ? CHR(9)+' Id = '+.ID.Valor ? 
CHR(9)+' BaseImp = '+.BaseImp.Valor ? CHR(9)+' Importe = '+.Importe.Valor 
ENDWITH ? nOrd = nOrd +1 ENDDO
 * * ... * ENDIFENDWITH
*********************DEFINE CLASS RespuestaAfip AS SESSION
 cXML = ''
 ******************** * 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, 
cNombreX, nOrd
 #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,':','_')
 * resuelvo si existe un array *** cNombreX = cNombre nOrd = 1 DO WHILE 
PEMSTATUS(oObj,cNombreX,5) OR PEMSTATUS(oObj,cNombreX+TRANSFORM(nOrd),5) IF 
nOrd = 1 AND !PEMSTATUS(oObj,cNombreX+'1',5) ADDPROPERTY(oObj,cNombre+ 
TRANSFORM(nOrd),EVALUATE('oObj.'+cNombre)) REMOVEPROPERTY(oObj,cNombre) ENDIF 
nOrd = nOrd + 1 cNombreX = cNombre + TRANSFORM(nOrd) ENDDO IF nOrd > 1 cNombre 
= cNombre + TRANSFORM(nOrd) ENDIF * resuelvo arrays ***
 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>                  <AlicIva>                     <Id>3</Id>          
           <BaseImp>10</BaseImp>                     <Importe>0</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
 


     El Lunes, 6 de julio, 2015 16:48:44, Mario Andrés Ageno 
<[email protected]> escribió:
   

 Gracias Mauricio  From: Mauricio Pistiner Sent: Sunday, July 05, 2015 10:24 
PMTo: GUFA List Member Subject: [GUFA] Factura Electrónica - Leer respuesta XML 
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 
ProcesarRespuestaLOCAL cText, oXML, cValores  oXML = 
CREATEOBJECT("MSXML.DOMDocument") IF 
oXML.LOADXML(THIS.cXML)THIS.ProcesaNodos(oXML.childNodes,THIS)ENDIF ENDPROC 
*********************PROCEDURE ProcesaNodosLPARAMETERS Nodos AS 
MSXML.IXMLDOMNodeList, oObjLOCAL oNodo AS MSXML.IXMLDOMNode, cNombre #DEFINE 
NODE_ELEMENT 1#DEFINE NODE_ATTRIBUTE 2#DEFINE NODE_TEXT 3 FOR EACH oNodo IN 
NodosIF oNodo.nodeType = 
NODE_TEXTADDPROPERTY(oObj,'Valor',TRANSFORM(oNodo.nodeValue))ENDIFIF 
oNodo.hasChildNodescNombre = 
STRTRAN(oNodo.nodeName,':','_')ADDPROPERTY(oObj,cNombre,CREATEOBJECT('empty'))THIS.ProcesaNodos(
 oNodo.childNodes, EVALUATE('oObj.'+cNombre))ENDIFENDFOR ENDPROC 
*********************PROCEDURE Mock_XMLLOCAL 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  

  

Responder a