Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
XML Hierarquico
Message
From
08/07/2004 10:35:55
 
 
To
08/07/2004 10:12:07
General information
Forum:
Visual FoxPro
Category:
XML, XSD
Title:
Miscellaneous
Thread ID:
00921972
Message ID:
00921990
Views:
17
>
>Existe como transformar um XML hierarquico em diversos cursores? Como exemplo, gostaria de transformar um XML em cursores, que possuí uma estrutura parecida com o XML apresentado na pág. 140 do livro desenvolvendo soluções XML com VFP.

Oi Ricardo

Esta rotina utilizo para uma necessidade específica de um tipo de XML.. Se naturalmente ela não funcionar acredito que com poucas modificações ela funcionará.

Obs: VFP6 SP5
cwdata                   = filetostr("c:\minha_pasta\meu_arq_xml.xml")
=criacursordoxml(cwdata, "cur_from_xml")
=atualizacursordoxml(cwdata, "cur_xml")
if  used("cur_from_xml")
    sele cur_from_xml
    browse
endif

return

FUNCTION criacursordoxml
LPARAMETER cwxml, cwnomecur
DIMENSION m.laofc[1]
DIMENSION m.lafields[1,4]
DIMENSION m.lacampos[1]
m.lacampos[1]            = ""
i1                       = 0
ALINES(m.laofc,cwxml)

FOR EACH m.lclinha IN m.laofc
    m.lninicio           = AT('<',m.lclinha)
    m.lnfim              = AT('>',m.lclinha)
    IF  m.lninicio>0 AND m.lnfim>0 AND SUBSTR(m.lclinha,m.lninicio+1,1)!='/'
        IF  ASCAN(m.lacampos, SUBSTR(m.lclinha,m.lninicio+1,m.lnfim-m.lninicio))=0
            i1           = i1 + 1
            DIMENSION m.lacampos[I1]
            m.lacampos[i1]   = SUBSTR(m.lclinha,m.lninicio+1,m.lnfim-m.lninicio)
            DIMENSION m.lafields[i1,4]
            m.lafields[i1,1] = SUBSTR(m.lclinha,m.lninicio+1,m.lnfim-m.lninicio)
            m.lafields[i1,2] = "C"
            m.lafields[i1,3] = 20
            m.lafields[i1,4] = 0
        ENDIF
    ENDIF
ENDFOR
SELE 0
CREATE CURSOR (cwnomecur) FROM ARRAY m.lafields
RETURN

FUNCTION atualizacursordoxml
LPARAMETER cwxml, cwnomecur
DIMENSION m.laofc[1]
DIMENSION m.lacampos[1]

SELE (cwnomecur)

ALINES(m.laofc,cwxml)
i1=0

m.clinicio1 = 0
FOR EACH m.lclinha IN m.laofc

    IF  "</STMTTRN>"$m.lclinha  && <---  ver qual a sua tag que 'fecha' um registro
        INSERT INTO (cwnomecur) FROM MEMVAR
    ELSE
        m.lninicio = AT('<',m.lclinha)  && Acha o Campo
        m.lnfim    = AT('>',m.lclinha)

        IF  m.lninicio>0 AND m.lnfim>0 AND SUBSTR(m.lclinha,m.lninicio+1,1)!='/'
            wcampo  = "m."+SUBSTR(m.lclinha,m.lninicio+1,m.lnfim-m.lninicio-1)
            &wcampo = STUFF(m.lclinha,1,AT('>',m.lclinha),"")
            &wcampo = STUFF(&wcampo,AT('</',&wcampo),LEN(&wcampo),"")
        ENDIF
    ENDIF
ENDFOR
RETURN
"Now to him who is able to do immeasurably more than all we ask or imagine, according to his power that is at work within us, Ephesians 3:20
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform