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

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