source: XMLIO_V2/dev/dev_rv/src4/xmlio/xml/xml_node.hpp @ 216

Last change on this file since 216 was 216, checked in by hozdoba, 11 years ago
File size: 5.6 KB
Line 
1/* ************************************************************************** *
2 *      Copyright © IPSL/LSCE, XMLIOServer, Avril 2010 - Octobre 2011         *
3 * ************************************************************************** */
4
5#ifndef __XML_NODE_HPP__
6#define __XML_NODE_HPP__
7
8/**
9 * \file    xml_node.hpp
10 * \brief   Manipulation des noeuds dans l'arborescence des documents xml (entête).
11 * \author  Hervé Ozdoba
12 * \version 0.4
13 * \date    12 Juin 2011
14 */
15
16#ifndef __XIOS_NO_EXTERN
17
18// C++ standard headers
19#include <string>
20#include <iostream>
21#include <map>
22
23// rapidXML headers
24#include <rapidxml.hpp>
25
26#endif // __XIOS_NO_EXTERN
27
28// XMLIOServer headers
29#include "xmlioserver_spl.hpp"
30
31// ////////////////////////////// Déclarations ///////////////////////////// //
32
33namespace xmlioserver
34{
35   namespace xml
36   {
37      /**
38       * \class CXMLNode
39       * \brief Classe de gestion des noeuds dans les documents XML.
40       */
41      class CXMLNode
42      {
43         public : // Constructeur publique
44
45            /*!
46             * \brief Constructeur d'un noeud xml.
47             * \param _root : un noeud xml dans la bibliothÚque rapidxml
48             * \see node
49             *
50             * <i> Exemple d'utilisation: </i>
51             * \code
52             * //> Création d'un noeud xml à partir de rapidxml.
53             * char * c_str =  "<? xml version=1.0 ?><simulation></simulation>";
54             * rapidxml::xml_document<char> xmldoc;
55             * xmldoc.parse<0>(c_str);
56             * CXMLNode node(doc.first_node());
57             * \endcode
58             */
59            CXMLNode(rapidxml::xml_node<char> * const _root);
60
61         public :// Destructeur
62
63            //! \brief Destructeur de l'objet.
64            ~CXMLNode(void);
65
66         public : // Accesseurs
67
68            /*!
69             * \brief Retourne le nom de l'élément courant (pointé dans le document xml).
70             * \return l'identifiant de l'élément.
71             *
72             * <i> Appliquée au document xml ci_dessous, la méthode retourne pour le noeud racine
73             * la chaîne <b>element_name</b> </i>
74             * \code
75             * <? xml version=1.0 ?>
76             * <element_name attrib_cle1 = "attrib_value1" attrib_cle2 = "attrib_value2">
77             * Ceci est un contenu.
78             * </element_name>
79             * \endcode
80             */
81            std::string getElementName(void) const;
82
83            /*!
84             * \brief Retourne les valeurs d'attributs de l'élément courant (pointé dans le document xml).
85             * \return une map d'attributs identifiés par des clés dans le conteneur.
86             *
87             * <i> Appliquée  au document xml ci_dessous, la méthode retourne pour le noeud racine la map : </i>
88             * <UL>
89             *     <LI>attrib_cle1 -> attrib_value1
90             *     <LI>attrib_cle2 -> attrib_value2
91             * </UL>
92             * \code
93             * <? xml version=1.0 ?>
94             * <element_name attrib_cle1 = "attrib_value1" attrib_cle2 = "attrib_value2">
95             * Ceci est un contenu.
96             * </element_name>
97             * \endcode
98             */
99            std::map <std::string, std::string> getAttributes(void) const;
100
101         public : // Mutateurs
102
103            /*!
104             * \brief Déplace le pointeur du noeud actuel vers le suivant si possible.
105             * \return <b>true</b> si le noeud pointe désormais sur l'élément suivant,
106             *  <b>false</b> s'il n'y a pas d'élément suivant.
107             * \see goToChildElement goToParentElement
108             */
109            bool goToNextElement(void);
110
111            /*!
112             * \brief Déplace le pointeur du noeud actuel vers son premier enfant si possible.
113             * \return <b>true</b> si le noeud pointe désormais sur l'élément enfant,
114             *  <b>false</b> s'il n'y a pas d'élément enfant.
115             *  \see goToNextElement goToParentElement
116             */
117            bool goToChildElement(void);
118
119            /*!
120             * \brief Déplace le pointeur du noeud actuel vers son parent si possible.
121             * \return <b>true</b> si le noeud pointe désormais sur l'élément parent,
122             *  <b>false</b> s'il n'y a pas d'élément parent.
123             * \see goToChildElement goToNextElement
124             */
125            bool goToParentElement(void);
126
127         public : // Accesseurs statiques
128
129            /*!
130             * \brief Retourne le nom de l'élément racine du document xml.
131             * \return le nom de l'élément racine du document xml
132             * \see RootName
133             */
134            static const std::string & GetRootName(void);
135
136         protected : // Constructeurs protégés
137
138            //! \brief Constructeur simple.
139            CXMLNode(void);                            // NIY
140
141            /*!
142             * \brief Constructeur par copie .
143             * \param _node : référence du noeud à copier.
144             */
145            CXMLNode(const CXMLNode & _node);          // NIY
146
147            /*!
148             * \brief Constructeur par copie.
149             * \param _node_ptr : le pointeur du noeud à copier.
150             */
151            CXMLNode(const CXMLNode * const _node_ptr); // NIY
152
153         private : // Propriété privée
154
155            //! \brief Pointeur sur un objet de type noeud dans la bibliothÚque rapidxml.
156            rapidxml::xml_node<char> * node;
157
158         private : // Propriété statique privée
159
160            //! \brief Nom de l'élément racine du document xml.
161            static std::string RootName;
162
163      }; //class CXMLParser
164
165   }// namespace xml
166} // namespace xmlioserver
167
168#endif  // __XML_NODE_HPP__
169
Note: See TracBrowser for help on using the repository browser.