Dilib, module SxmlNode, fonctions c, manipulations d'arbres

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

Cette page introduit les fonctions permettant la manipulation d'arbres dans les Stream Xml.

 

Fonctions opérant sur un noeud

Fonction SxmlReplaceName

Cette fonction permet de changer le nom d'un nœud;

Synopsis
#include "SxmlNode.h"
SxmlNode *SxmlReplaceName(SxmlNode *node, char *newName);

Cette fonction remplace le nom actuel d'un nœud par celui qui est donné en attribut.

Si le nouveau nom est défini par une constante il faut notamment créer un clone de la chaîne par un strdup(), par exemple :

SxmlReplaceName(titleNode, strdup("titre");

Fonction SxmlRemoveChild

Cette fonction permet d'isoler un nœud (plus précisément le sous-arbre correspondant). Elle est conforme aux recommandations du W3C.

Attention, une itération sur cette fonction ne doit pas être gérée par SxmlReset.

Exemple :

SxmlNode *nodeToRemove;
if ((nodeToRemove=SxmlGetFirstChildByTagName(listConcept, "preferredConcept"))
  {
      SxmlRemoveChild(nodeToRemove);
  }

Fonction SxmlReplaceChild

Cette fonction permet de remplacer un nœud (et sa descendance) dans un arbre par un autre nœud.

Le nœud initial (et sa descendance) est supprimé.

Attention, une itération sur cette fonction ne doit pas être gérée par SxmlReset.

Fonctions d'insertion

Fonction SxmlInsertAfter

Fonction SxmlInsertBefore

Fonction SxmlAppendChid

Fonction SxmlAddFirstChild

Exemples récapitulatifs

Remplacement d'un fils par son petit-fils

  SxmlNode *child1;
  SxmlNode *child2;
  SxmlNode *nodeToTransform;/* dont le fils sera remplacé par le petit fils */

  if (nodeToTransform= ... )
     {
	if (child1=SxmlFirstChild(nodeToTransform))
           {
	     if (child2=SxmlFirstChild(child1))
	       {
	          SxmlRemoveChild(child2);
	          SxmlReplaceChild(child1, child2);
                  SxmlFree(child1);
        	}
           }
    }