summaryrefslogtreecommitdiffstats
path: root/Src/Xml.h
blob: 477a08648c057f5de79a5f4d79dbeab2469e1181 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
/*
 * Video On Demand Samples
 *
 * Copyright (C) 2015 Microchip Technology Germany II GmbH & Co. KG
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 * You may also obtain this software under a propriety license from Microchip.
 * Please contact Microchip for further information.
 *
 */

/*----------------------------------------------------------*/
/*! \file
 *  \brief  This file contains the CXml class.
 */
/*----------------------------------------------------------*/
#ifndef _XML_H_
#define _XML_H_

#include "Types.h"
#include <libxml/tree.h>
#include <libxml/parser.h>


#define XML_DEFAULT_VALUE_LEN   255

/*----------------------------------------------------------*/
/*! \brief Generic class to read XML files. It does not implement a concrete use case.
 */
/*----------------------------------------------------------*/
class CXml
{
    xmlDoc *m_Doc;
    xmlNode *m_Node;
    bool m_bDocOpened;
protected:
    static int ConvertToInt( xmlChar *xString );

public:
    /*----------------------------------------------------------*/
    /*! \brief construct a XML document from a file name
     */
    /*----------------------------------------------------------*/
    CXml( const char *szFile );


    /*----------------------------------------------------------*/
    /*! \brief construct a XML document from a zero terminated string in the memory.
     */
    /*----------------------------------------------------------*/
    CXml( const char *szBuffer, uint32_t nBufferLen );


    /*----------------------------------------------------------*/
    /*! \brief construct a XML document from a given node
     */
    /*----------------------------------------------------------*/
    CXml( CXml &Node );



    /*----------------------------------------------------------*/
    /*! \brief construct a XML document from a file name
     */
    /*----------------------------------------------------------*/
    ~CXml();



    /*----------------------------------------------------------*/
    /*! \brief gets top node inside root of XML document
     *
     * \return true, if successful
     */
    /*----------------------------------------------------------*/
    bool SetToTopNode();



    /*----------------------------------------------------------*/
    /*! \brief find first child node
     *
     * \return true, if child node was found
     */
    /*----------------------------------------------------------*/
    bool FindFirstChildNode();




    /*----------------------------------------------------------*/
    /*! \brief find next node on same level
     *
     * \return true, if node was found
     */
    /*----------------------------------------------------------*/
    bool FindNextNode();




    /*----------------------------------------------------------*/
    /*! \brief find a XML node with a given tag
     *
     * \param szTag - tag looking for
     *
     * \return XML node
     */
    /*----------------------------------------------------------*/
    bool FindNode( const xmlChar *szTag );





    /*----------------------------------------------------------*/
    /*! \brief searches a node, which has a child node with a
     *         given value
     *
     * \param szNodeTag - tag of nodes which are included in search
     * \param szValueTag - tag of value inside node
     * \param szValue - value looked for
     *
     * \return XML true if found
     */
    /*----------------------------------------------------------*/
    bool FindNodeWithValue( const xmlChar *szNodeTag, const xmlChar *szValueTag, const xmlChar *szValue );



    /*----------------------------------------------------------*/
    /*! \brief searches node, which has a child node with a
     *         given integer value
     *
     * \param szNodeTag - tag of nodes which are included in search
     * \param szValueTag - tag of value inside node
     * \param szValue - value looked for
     *
     * \return true if found
     */
    /*----------------------------------------------------------*/
    bool FindNodeWithValueInt( const xmlChar *szNodeTag, const xmlChar *szValueTag, int nValue );

    /*----------------------------------------------------------*/
    /*! \brief get node's child value as string
     *
     * \param szTag - tag of the value inside the node
     *
     * \return value as string if found, otherwise NULL
     */
    /*----------------------------------------------------------*/
    bool GetChildValue( const xmlChar *szTag, xmlChar *szValue, int nMaxLen = XML_DEFAULT_VALUE_LEN );


    /*----------------------------------------------------------*/
    /*! \brief get node's child value as int
     *
     * \param szTag - tag of the value inside the node
     * \param nErr - value returned in case of an error
     *
     * \return value as int
     */
    /*----------------------------------------------------------*/
    bool GetChildValueInt( const xmlChar *szTag, int &nValue );
};

#endif