Dilib, module SxmlProc, type SxmlProcessor

De Wicri Outils
LogoDilib.gif
Panneau travaux.png
Bibliothèque Dilib (ressources numériques)
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.

 

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,

En pratique, dans les cas simples, cet objet est (sera!) géré à travers un SxmlProcessor.