XMLIOSERVER 0.4
Serveur d'Entrées/Sorties parallèles
|
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