Dilib, module SxmlNode, fonctions c, accès aux éléments

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

Cette page introduit les fonctions de base pour l'accès aux éléments d'un arbre XML.

 

Méthodes de base

Les méthodes élémentaires pour accéder à l'environnement d'un nœud sont les suivantes :

  • SxmlFirstChild: le premier fils ;
  • SxmlLastChild: le dernier fils ;
  • SxmlNexSibling: le frère droit ;
  • SxmlPreviousSibling: le frère gauche;
  • SxmlParent: le père .


SxmlFirstChild

Synopsis
#include "SxmlNode.h"
SxmlNode *SxmlFirstChild(SxmlNode *node);

Accès aux enfants (child)

SxmlGetFirstChildByTagName

Synopsis
#include "SxmlNode.h"
SxmlNode *SxmlGetFirstChildByTagName(SxmlNode *node, char *tag);

SxmlGetChildPosition

Synopsis
SxmlNode *SxmlGetChildByPosition(SxmlNode *n1, int pos);

Accès aux descendants

SxmlGetFirstDescendantByTagName

Cette fonction permet d'atteindre le premier descendant d'un nœud dont le nom est identique au paramètre.

Synopsis
#include "SxmlNode.h"
SxmlNode *SxmlGetFirstDescendantByTagName(SxmlNode *node, char *tag);

SxmlGetNextDescendantByTagName

Cette fonction permet d'atteindre le descendant suivant d'un nœud dont le nom est identique au paramètre, à partir d'un descendant déjà identifié.

Synopsis
#include "SxmlNode.h"
SxmlNode *SxmlGetFirstDescendantByTagName(SxmlNode *node, SxmlNode *from, char *tag);

SxmlListDescendant

Cette fonction est en fait un constructeur de SxmlNodeList (et donc de SxmlNode) qui crée une liste de pointeurs vers les descendants identifiés par tag.

Synopsis
#include "SxmlNode.h"
SxmlNodeList *SxmlListDescendant(SxmlNode *node, char *tag)

Exemple d'emploi

Recherche de tous les éléments « title » d'un document.

  elem=SxmlGetFirstDescendantByTagName(doc, "title");
  while (elem)
    {
      SxmlPrint(elem);
      putchar ('\n');
      elem=SxmlGetNextDescendantByTagName(doc, elem, "title");
    }

Cet exemple peut se traiter avec une liste :

  list=SxmlListDescendant(doc, "title");
  SxmlReset(list);
  while(elem=SxmlNodeListNextNode(list))
    {
      SxmlPrint(elem);
      putchar ('\n');
    }

Itérateurs

Un itérateur qui permet d'atteindre la suite des fils est associé à chaque élément Sxml.

fonction SxmlReset

fonction SxmlNextNode

Exemple

SxmlNode *authorNode;
SxmlNode *affNode;

  ...

SxmlReset (authorNode);
while ((affNode=SxmlNextNode(authorNode)))
  {
     if (!(SxmlNodeHasName(affNode), "affiliation") continue;
     proceedAffiliation (affNode);
  }