Como validar si existe un nodo en el XML con Vfp

801 views
Skip to first unread message

Jaime Paredes

unread,
Nov 15, 2014, 7:46:33 AM11/15/14
to publice...@googlegroups.com
Amigos una paregunta tengo un xml que me esta cargando con normalidad pero hay otros xml que no tienen un campo o nodo por desir, en el xml que si me carga normal tengo 7 nodos pero que pasa en otro xml tengo solo 5 no hay 2 nodos, ahora mi pregunta es... como valido si existe un nodo en el campo para poder adicionar o no para que me resulte comodo adicionar cualquier xml.

Muchas Gracias.
Ojo el xml no es generado por el VFP es de otro aplicativo

Fidel Charny

unread,
Nov 15, 2014, 9:52:33 AM11/15/14
to publice...@googlegroups.com
Lo puedes hacer leyendo el xml con fopen(). Un ejemplo
LOCAL i,lcXml,lcNodo,lnHand

lcXml=[c:\Theodore\bdisfon.xml]
lcNodo=[<xsd:element name="guita">]
LOCAL ARRAY laNodos(5,2)
laNodos[1,1]=[<xsd:element name="codigo">]
laNodos[2,1]=[<xsd:element name="fecha"]
laNodos[3,1]=[<xsd:element name="numero">]
laNodos[4,1]=[<xsd:element name="divisa">]
laNodos[5,1]=[<xsd:element name="anticipo">]
lnHand=FOPEN(lcXml)
IF lnHand = -1
RETURN
ENDIF
DO WHILE !FEOF(lnHand)
lcGet=CHRTRAN(FGETS(lnHand,8192),CHR(9),"")
FOR i=1 TO ALEN(laNOdos,1)
IF AT(laNodos[i,1],lcGet)>0
laNodos[i,2]=.t.
ENDIF
NEXT
ENDDO
=FCLOSE(lnHand)
lcMess="Situación"
FOR i=1 TO ALEN(laNodos,1)
lcMess=lcMess+CHR(13)+laNodos[i,1]+"="+TRANSFORM(laNodos[i,2])
NEXT
MESSAGEBOX(lcMess)

Martin Paredes

unread,
Nov 15, 2014, 10:43:44 AM11/15/14
to publice...@googlegroups.com
con este ejemplo puedes recorrer todos los nodos, prueba-lo........


******************************* leer todo el xml
LOCAL xdoc AS MSXML2.DOMDocument 
CLEAR
xdoc=CREATEOBJECT('MSXML2.DOMdocument')
cxml=GETFILE()
ctxt=FILETOSTR(cxml)
xdoc.LOAD(cxml)
LeerCDs(xdoc.documentElement.childNodes)

FUNCTION LeerCDs
   LPARAMETERS root AS MSXML2.IXMLDOMNode
   LOCAL CHILD AS MSXML2.IXMLDOMNode
   MESSAGEBOX(lctotal+' - '+lctipo)
   FOR EACH oChannel IN root
       MESSAGEBOX(oChannel.NodeName)
       MESSAGEBOX(oChannel.Text)
       FOR EACH oItem IN oChannel.ChildNodes
           MESSAGEBOX(oItem.NodeName)
           MESSAGEBOX(oItem.Text)    
           FOR EACH oChild IN oItem.ChildNodes
               MESSAGEBOX(oChild.NodeName)
               MESSAGEBOX(oChild.Text)            
               FOR EACH oFinal IN oChild.ChildNodes
                   MESSAGEBOX(oFinal.NodeName)
                   MESSAGEBOX(oFinal.Text)
               ENDFOR
           ENDFOR
       ENDFOR
   ENDFOR
RETURN

salds...
Mapasac
General Escobedo, N.L. Mexico

Martin Paredes

unread,
Nov 15, 2014, 11:50:29 AM11/15/14
to publice...@googlegroups.com
por experiencia, no te lo recomiendo, preferible lo manejes en carpetas pre-configuradas.

Salds.
Mapasac
General Escobedo, N.L


El sábado, 15 de noviembre de 2014 06:46:33 UTC-6, Jaime Paredes escribió:

Jaime Paredes

unread,
Nov 15, 2014, 12:16:28 PM11/15/14
to publice...@googlegroups.com
Un favor grande le envio el xml  y el prg que estoy pretendiendo hacer, la idea es que el xml que esta adjunto aparesca los datos en un db o en un cursorpara luego visualizar en un grid. ali en el prg le estoy pretendiendo hacer y me graba en blanco, quiero que me apoye en este atajo.
lee_xml.prg
13090884521053000148550010000826660003812576.xml

Jaime Paredes

unread,
Nov 15, 2014, 11:47:34 AM11/15/14
to publice...@googlegroups.com
y tambien puedo guardarlos en una bd
Reply all
Reply to author
Forward
0 new messages