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

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