XMLIOSERVER 0.4
Serveur d'Entrées/Sorties parallèles
xml_node.cpp
Aller à la documentation de ce fichier.
00001 /* ************************************************************************** *
00002  *      Copyright © IPSL/LSCE, XMLIOServer, Avril 2010 - Octobre 2011         *
00003  * ************************************************************************** */
00004 
00013 // XMLIOServer headers
00014 #include "xml_parser.hpp"
00015 
00016 // /////////////////////////////// Définitions ////////////////////////////// //
00017 
00018 namespace xmlioserver {
00019 namespace xml {
00020 
00021    // ------------------------ Propriété statique privée -----------------------
00022    
00023    // Nom de l'élément racine du document xml.
00024    std::string CXMLNode::RootName("simulation");
00025 
00026    // ------------------------------ Constructeurs -----------------------------
00027 
00028    // Constructeur d'un noeud xml.
00029    CXMLNode::CXMLNode(rapidxml::xml_node<char> * const _root)
00030       : node(_root)
00031    { /* Ne rien faire de plus */ }
00032       
00033    // ------------------------------- Destructeur ------------------------------
00034 
00035    // Destructeur de l'objet.
00036    CXMLNode::~CXMLNode(void)
00037    { /* Ne rien faire de plus */ }
00038 
00039    // ------------------------------- Accesseurs -------------------------------
00040 
00041    // Retourne les valeurs d'attributs de l'élément courant (pointé dans le document xml).
00042    std::map <std::string, std::string> CXMLNode::getAttributes(void) const
00043    {
00044       std::map <std::string, std::string> attributes;
00045       rapidxml::xml_attribute<char> * currentAttr = NULL;
00046 
00047       if ((currentAttr = this->node->first_attribute()) != NULL)
00048       {
00049          do 
00050          {
00051             attributes.insert(std::pair<std::string, std::string>
00052                              (std::string(currentAttr->name()),
00053                               std::string(currentAttr->value())));
00054          } while ((currentAttr = currentAttr->next_attribute()) != NULL);
00055       }
00056 
00057       return (attributes) ;
00058    }
00059    
00060    // Retourne le nom de l'élément courant (pointé dans le document xml).
00061    std::string CXMLNode::getElementName(void) const
00062    { 
00063          return (this->node->name()); 
00064    }
00065    
00066    // ------------------------------- Mutateurs --------------------------------
00067 
00068    // Déplace le pointeur du noeud actuel vers le suivant si possible.
00069    bool CXMLNode::goToNextElement(void)
00070    {
00071       bool retvalue = false;
00072       for(rapidxml::xml_node<char> * nextElement = this->node->next_sibling();
00073                                    ; nextElement = this->node->next_sibling())
00074       {
00075          if (nextElement == NULL) break;
00076          else if (nextElement->type() == rapidxml::node_element)
00077          { 
00078             node = nextElement;
00079             return (!retvalue);
00080          }
00081       }
00082       return (retvalue);
00083    }
00084 
00085    // Déplace le pointeur du noeud actuel vers son premier enfant si possible.
00086    bool CXMLNode::goToChildElement(void)
00087    {
00088       bool retvalue = false;
00089       rapidxml::xml_node<char> * nextElement = this->node->first_node();
00090       if (nextElement != NULL)
00091       {
00092          for(;;nextElement = this->node->next_sibling())
00093          {
00094             if (nextElement == NULL) break;
00095             else if (nextElement->type() == rapidxml::node_element)
00096             { 
00097                node = nextElement; 
00098                return (!retvalue); 
00099             }
00100          }
00101       }
00102       return (retvalue);
00103    }
00104 
00105    // Déplace le pointeur du noeud actuel vers son parent si possible.
00106    bool CXMLNode::goToParentElement(void)
00107    {
00108       bool retvalue = false;
00109       if (!(this->getElementName().compare(CXMLNode::RootName)))
00110          return (retvalue);
00111       node = node->parent();
00112       return (!retvalue);
00113    }
00114    
00115    // -------------------------- Accesseurs statiques --------------------------
00116 
00117    // Retourne le nom de l'élément racine du document xml.
00118    const std::string & CXMLNode::GetRootName(void)
00119    { 
00120       return (CXMLNode::RootName); 
00121    }
00122 
00123 } // namespace xml
00124 } // namespace xmlioserver
 Tout Classes Espaces de nommage Fichiers Fonctions Variables Définition de type Énumérations Valeurs énumérées Amis Macros