Dilib, module SxmlNode, fonctions c, entrées sorties

De Wicri Outils
LogoDilib.gif
Panneau travaux.png
Bibliothèque Dilib (ressources numériques)
Module SxmlNode

Cette page introduit les procédures courantes d'entrée sortie des flux ou documents Sxml.

 

Introduction

Entrées-sorties

Les fonctions qui réalisent les entrées sorties sont réalisées à partir des fonctions précédentes et utilisent, pour les entrées, un lecteur, ou moteur de lecture (un SxmlRecordReader).

Écritures ou exportation d'arbres Sxml

  • Impression d'un objet XML sur la sortie standard :
    SxmlPrint(node);
  • Impression d'un objet XML dans un fichier :
    SxmlFilePrint(node, file);
                  FILE *file;

Lecture d'un fichier contenant une suite d'enregistrements

Le SxmlRecordReader sert à contrôler la gestion du flux d'entrées et l'appel au parser. Dans les cas simples, un lecteur implicite facilite les opérations (et rend transparent ce lecteur interne).

logo travaux La fonction SxmlInputNextDocumentElement avait été introduite dans le contexte de traitements de flots de documents de métadonnées (sans commentaires ni directives de DTD). Le passage au plein texte introduit de nouvelles contraintes qui amènent à des spécifications plus précises. De nouvelles fonctions ont été introduites en V0.6.06

Une seule fonction est alors utile dans les cas simples : SxmlInputNextDocumentElement (à partir de la version V0.6.06, cette fonction est remplacée par SxmlInputGetDocumentElement et SxmlInputGetRecordLastItem).

  • lecture du prochain document XML sur l'entrée standard (à partir de la version V.6.06).
    SxmlNode *SxmlInputGetDocumentElement();

Cette fonction retourne un pointeur sur la racine du document et la valeur NULL en fin de fichier.

Exemples

Impression de tous les premiers fils ayant « a » pour tag.
#include "SxmlNode.h"
main()
{
  SxmlNode *docu ,*son;
  while((docu=SxmlInputGetDocumentElement()))
    {
       if (son=SxmlFirstChild(docu))
         {if (SxmlNodeHasName(son,"a"))
                 {SxmlPrint(son);putchar('\n');
    }}}
}
Ajout d'un nouvel élément à tous les documents.
#include "SxmlNode.h"
main()
{
  SxmlNode *docu;
  while((docu=SxmlInputGetDocumentElement()))
    {
       SxmlNode *nouveauFils;
       nouveauFils=XmlLeafCreate("a","nouveau");
       SxmlAppendChild(docu,nouveauFils);
       SxmlPrint(docu);
       putchar('\n');
    }
}
ou en écriture plus compacte 
#include "SxmlNode.h"
main()
{
  SxmlNode *docu;
  while((docu=SxmlInputGetDocumentElement()))
    {
       SxmlAppendChild(docu,SxmlLeafCreate("a","nouveau"));
       SxmlPrint(docu);
       putchar('\n');
    }
}