ATOUTFOX
COMMUNAUTÉ FRANCOPHONE DES PROFESSIONNELS FOXPRO
Visual FoxPro : le développement durable

Forum AtoutFox : STREXTRACT()   

Sujet
... 13 14 15 16 17 18 19 20 21 22 ...
LECTURE D'UN FICHIER WINDEV VERSION 4 EXTENSION .FIC O.Abderrazak - 21/06/2012 16h00
Visual Studio C# 4 - Irony.codeplex.com P@trick - 21/06/2012 14h56
Probleme avec ShellExecute et fichier .jpg Francis Faure - 20/06/2012 18h08
problème avec une vue NODATA Jean à Grenoble - 19/06/2012 18h26
Conférence Mike Gagnon du 27 Michel Lévy - 18/06/2012 18h36
AES Gregory - 18/06/2012 14h01
STREXTRACT() Jean à Grenoble - 16/06/2012 08h25
[FIC] Adaptation d'un projet alahem1 - 16/06/2012 01h00
WINSOCK VFP/CITRIX JpG - 15/06/2012 15h48
WindowsMail - Lecture mails Julien - 15/06/2012 14h56
Erreur de cohérence interne menu manager houcineph - 14/06/2012 16h24
Sybase Advantage Database Server dridbul2 - 14/06/2012 12h28
SELECT-SQL : relation n-n FoxInCloud - 14/06/2012 11h40
ASSERT MESSAGE limité à 120 caractères FoxInCloud - 13/06/2012 19h08
Mails et doublons de noms de pièces jointes Gérard - 13/06/2012 16h56
UPDATE et (nomtable) Jean à Grenoble - 13/06/2012 10h02
MessageBox() Francis Faure - 11/06/2012 17h16
le bug du jour ! Jean à Grenoble - 10/06/2012 16h33
[FIC] harmonisation des forms en cours d'exécution par les utilisateurs avec foxincloud JLC - 08/06/2012 10h41
transform(d|t, 'format') FoxInCloud - 07/06/2012 15h20
... 13 14 15 16 17 18 19 20 21 22 ...

rss Flux RSS des derniers messages

Vous devez vous identifier pour pouvoir poser une question ou répondre.

sam. 16 juin 2012, 08h25
Jean à Grenoble
atoutfox.public.association

STREXTRACT()

Une suggestion vue sur Profox pour la conversion XML vers un cursor utilise la
fonction STREXTRACT. L'aide VFP de cette fonction donne un exemple de code
récursif pour le 'parsing' d'un XML. Je l'ai trouvé 'extraordinaire' !! Je l'ai
un peu commenté et vous le livre ci-dessous :
Question : c'est quoi une balise <toto/> ?


CLEAR
SET PATH TO (HOME(2) + 'Data\')   && Set path to the customer table
USE customer && n'importe quelle table
?cursortoxml(0,"x",1,0,2)   && La variable X
* contient le code XML des 2 premiers enregistrements
?x         && on montre le XML
"début"
xmlproc(x,0)      && on parse (découpe ?) le XML
"fin"

PROCEDURE xmlproc(x as String, nLev as Integer)   as void
    * cette procédure est récursive
    LOCAL cTagName, cContents, mterm
    DO WHILE .t.
       * on cherche la première balise
       cTagName = STREXTRACT(x,"<",">")
       IF LEN(cTagName) = 0   && no tag found
          * on n'a pas trouvé de balise : c'est la fin
          * ATTENTION c'est la fin de la boucle pour le niveau de
          * récursivité en cours et non pour l'ensemble du XML
          ??' ',x   && on imprime la chaine telquel : c'est le contenu
          EXIT
       ENDIF
       IF RIGHT(cTagName,1) = '/'   && like "<region/>"
          cTagName = LEFT(cTagName, LEN(cTagName)-1)
          cContents=""
          mterm = "<"+cTagName+"/>"   && "<region/>"
       ELSE
          * mterm est la balise de fin correspondant à la balise que
          * l'on vient de trouver
          mterm = "</"+cTagName+">"   && "</region>"
          * on cherche le texte entre la balise trouvée plus haut et
          * la balise de fin que l'on vient de construire :
          * c'est le contenu !
          cContents = STREXTRACT(x,"<"+cTagName+">", mterm,1,2)
       ENDIF
       * on imprime la balise; le contenu sera imprimé dans le
       * niveau récursif suivant
       ?REPLICATE(" ",nLev),nLev+1,PADR(cTagName,20)
       * on parse le contenu dans un nouveau niveau de récursivité.
       * Soit on n'y trouve pas de balise et c'est un 'vrai' contenu.
       * Soit on y trouve une balise et
       * on traite un niveau d'imbrication XML supplémentaire
       xmlproc(cContents, nLev+1)
       x = STREXTRACT(x, mterm)   && on traite le reste du XML
    ENDDO
Permalink : http://www.atoutfox.org/nntp.asp?ID=0000009218
11 976 messages dans le forum • Liste complète des messages

www.atoutfox.org - Site de la Communauté Francophone des Professionnels FoxPro - v3.4.0 - © 2004-2013.
Cette page est générée par un composant COM+ développé en Visual FoxPro 9.0