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

De Wicri Outils
Révision datée du 16 juin 2017 à 19:50 par imported>Jacques Ducloy (1 révision importée)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
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);
  }