Miguel A.
SET EXACT On
LOCAL xdoc AS MSXML2.DOMDocument
PUBLIC mmoda, mnume, mpais, mpubl, mdeno, mclas, mopos, mprod, mgraf, mvigi
mgraf=''
mclas=''
mdeno=''
mmoda=''
mnume=''
mtitu=''
mpais=''
mpubl={}
mopos={}
mprod=''
mvigi=''
*!* Creamos un objeto basado en MSXML
xdoc=CREATEOBJECT('MSXML2.DOMdocument')
*!* Cargamos el archivo XML a procesar
xdoc.LOAD(mifichero)
*!* Llamamos a la función LeerXML pasándole el nodo raíz
LeerXML(xdoc.documentElement.childNodes)
insert into vigilancia (modalidad, numero, solicitant, pais, publicacio, denominaci, clases, productos, oposicion, imagen, vigilancia);
values (mmoda, mnume, mtitu, mpais, mpubl, mdeno, mclas, mprod, mopos, mgraf, mvigi)
SET EXACT Off
*****************
FUNCTION LeerXML
LPARAMETERS root AS MSXML2.IXMLDOMNode
LOCAL CHILD AS MSXML2.IXMLDOMNode
*!* Aqui se procesan los nodos del XML
FOR EACH CHILD IN root
DO CASE
CASE CHILD.nodeName="CodModalidad"
mmoda=CHILD.Text
CASE CHILD.nodeName="Numero"
mnume=CHILD.Text
CASE CHILD.nodeName="CodPais"
mpais=CHILD.Text
CASE CHILD.nodeName="Denominacion"
mdeno=CHILD.Text
CASE CHILD.nodeName="Titulares"
mtitu=CHILD.Text
CASE CHILD.nodeName="Fecha_Fin_Oposicion"
IF YEAR(mopos)=0
mopos=CTOD(CHRTRAN(LEFT(CHILD.Text,10), "/", "-"))
ENDIF
CASE CHILD.nodeName="Fecha_Publicacion"
IF YEAR(mpubl)=0
mpubl=CTOD(CHRTRAN(LEFT(CHILD.Text,10), "/", "-"))
ENDIF
CASE CHILD.nodeName="Clases"
mclas=CHILD.Text
CASE CHILD.nodeName="Grafico"
mgraf=CHILD.Text
CASE CHILD.nodeName="Productos_Servicios"
mprod=CHILD.Text
CASE CHILD.nodeName="Datos_Vigilancia"
mvigi=UPPER(ALLTRIM(STRTRAN(CHILD.Text,'-M','')))
CASE ALLTRIM(CHILD.nodeName)="G10Boletines_Expedientes"
insert into vigilancia (modalidad, numero, solicitant, pais, publicacio, denominaci, clases, productos, oposicion, imagen, vigilancia);
values (mmoda, mnume, mtitu, mpais, mpubl, mdeno, mclas, mprod, mopos, mgraf, mvigi)
mgraf=''
mclas=''
mdeno=''
mmoda=''
mnume=''
mtitu=''
mpais=''
mpubl={}
mopos={}
mprod=''
mvigi=''
ENDCASE
IF CHILD.hasChildNodes
LeerXML(CHILD.childNodes)
ENDIF
ENDFOR
SET EXACT OFF
ENDFUNC