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

Forum AtoutFox : Re: 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, 11h37
Gregory
atoutfox.public.association

Re: STREXTRACT()

> && on parse (découpe ?) le XML

Il existe une grammaire (de XML)
Parsing (syntax analysis) est essayer de trouver la correspondance entre la
grammaire et un exemple (ici un fichier xml)

S'il n'y a pas de correspondance - le compilateur dit q'il y a une faute

http://en.wikipedia.org/wiki/Parsing
http://fr.wikipedia.org/wiki/D%C3%A9composition_analytique



On en a parle a Reims



______
Gregory
______
"Jean à Grenoble" wrote in message news:jrh8tp$17ng$1@news.niouzes.net...

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=0000009223
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