Dilib, module SxmlProc, type SxmlProcessor
De Wicri Outils
Module SxmlProc |
L'objet SxmlProcessor est destiné à faciliter l'écriture de commandes qui demandent une interprétation de commandes (exemple SxmlSelect).
Il utilise un objet spécialisé pour la gestion mémoire : SxmlMemory.
Liste des modules Dilib
|
Exemple introductif
/* -*- coding: utf-8 -*- */
/**********************************************************************
*
* Programme de démonstration pour les outils de construction
* de commandes avec interprétation
*
***********************************************************************/
#include "SxmlProcessor.h"
#include "SxmlDomProc.h"
#include <stdlib.h>
int main()
{
SxmlMemory *mem1;
SxmlProcessor *p1;
SxmlElement *step;
SxmlElement *result;
mem1 =SxmlMemoryCreate(); /* création d'une mémoire */
p1 =SxmlProcessorCreate(mem1); /* création d'un processeur sur cette mémoire */
SxmlDomMemoryInit(mem1); /* mise en mémoire des fonctions implémentant DOM */
/* On initialise l'élément step avec un script xml dans lequel on appelle fisrtChild
sur un l'élément xml mess qui contient le texte Hello World
*/
step=SxmlFromString("<dom:firstChild><mess>Hello World</mess></dom:firstChild>");
result= SxmlProcessorEvalToNode(p1,step); /* évaluation de step */
SxmlPrint(result); /* imprime : Hello World */
putchar ('\n');
exit (0);
}
Pour tester ce programme :
. ~Dilib/init.sh
more $DILIB_IMPORT/SxmlProc/Test/sxmlProcHelloWorld.c
gcc $DILIB_IMPORT/SxmlProc/Test/sxmlProcHelloWorld.c $DILIB_CC -o $DILIB/MakeDir/sxmlProcHelloWorld
$DILIB/MakeDir/sxmlProcHelloWorld
Le processeur implicite
Pour faciliter les déclarations dans les cas courants, on peut utiliser un processeur implicite (SxmlProcessorImplicit) initialisé par le constructeur SxmlProcImplicitInit() qui introduit les fonctions courantes.
/* -*- coding: utf-8 -*- */
/**********************************************************************
*
* Exemple précédent simplifié
*
***********************************************************************/
#include "SxmlProc.h"
#include <stdlib.h>
int main()
{
SxmlElement *step;
SxmlElement *result;
SxmlProcImplicitInit();
step=SxmlFromString("<dom:firstChild><mess>Hello World</mess></dom:firstChild>");
result= SxmlProcessorEvalToNode(SxmlProcessorImplicit ,step); /* évaluation de step */
SxmlPrint(result); /* imprime : Hello World */
putchar ('\n');
exit (0);
}
Type SxmlMemory
Le type SxmlMemory gère les composantes utilisées par un SxmlProcessor comme une table des symboles,
![Icône de détail](https://wicri-demo.istex.fr/Wicri/SitDemIstex/V131/pool/images//thumb/6/61/Nuvola_apps_xmag.png/15px-Nuvola_apps_xmag.png)
En pratique, dans les cas simples, cet objet est (sera!) géré à travers un SxmlProcessor.