File: xmlutils.h

package info (click to toggle)
codelite 17.0.0%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 136,204 kB
  • sloc: cpp: 491,547; ansic: 280,393; php: 10,259; sh: 8,930; lisp: 7,664; vhdl: 6,518; python: 6,020; lex: 4,920; yacc: 3,123; perl: 2,385; javascript: 1,715; cs: 1,193; xml: 1,110; makefile: 804; cobol: 741; sql: 709; ruby: 620; f90: 566; ada: 534; asm: 464; fortran: 350; objc: 289; tcl: 258; java: 157; erlang: 61; pascal: 51; ml: 49; awk: 44; haskell: 36
file content (168 lines) | stat: -rw-r--r-- 6,964 bytes parent folder | download | duplicates (2)
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
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
//
// copyright            : (C) 2008 by Eran Ifrah
// file name            : xmlutils.h
//
// -------------------------------------------------------------------------
// A
//              _____           _      _     _ _
//             /  __ \         | |    | |   (_) |
//             | /  \/ ___   __| | ___| |    _| |_ ___
//             | |    / _ \ / _  |/ _ \ |   | | __/ _ )
//             | \__/\ (_) | (_| |  __/ |___| | ||  __/
//              \____/\___/ \__,_|\___\_____/_|\__\___|
//
//                                                  F i l e
//
//    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 2 of the License, or
//    (at your option) any later version.
//
//////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
#ifndef XMLUTILS_H
#define XMLUTILS_H

#include "codelite_exports.h"
#include "serialized_object.h"
#include "wx/xml/xml.h"

/// A collection of XML utils
class WXDLLIMPEXP_SDK XmlUtils
{
public:
    /// Find a child node by name by iterating the parent children. NULL if no childs exist
    /// \param parent  the parent node whom to be searched
    /// \param tagName the element tag name
    /// \param name	   the element 'Name' property value to search
    static wxXmlNode* FindNodeByName(const wxXmlNode* parent, const wxString& tagName, const wxString& name);

    /// Find the last child node of parent with a given name. NULL if no childs exist
    /// \param parent  the parent node whom to be searched
    /// \param name	   the element's tag name
    static wxXmlNode* FindLastByTagName(const wxXmlNode* parent, const wxString& tagName);

    /**
     * update node property. If multiple properties with the same name exist, this function updates
     * the first occurance
     * \param node
     * \param name property name
     * \param value new value to set
     */
    static void UpdateProperty(wxXmlNode* node, const wxString& name, const wxString& value);

    /**
     * Find the first child node of parent with a given name. NULL if no children exist
     * \param the parent node to be searched
     * \param the element's tag name
     */
    static wxXmlNode* FindFirstByTagName(const wxXmlNode* parent, const wxString& tagName);

    /**
     * Read all of the child nodes (presumed to be textnodes) of the passed node, optionally with a given tagname
     * \param node the node to be searched
     * \param tagName the child tag name to find and read their contents. If empty, read all children
     * \return a wxArrayString
     */
    static wxArrayString ChildNodesContentToArray(const wxXmlNode* node, const wxString& tagName = wxT(""));

    /**
     * Read all of the child nodes (presumed to be textnodes) of the passed node, optionally with a given tagname
     * \param node the node to be searched
     * \param tagName the child tag name to find and read their contents. If empty, read all children
     * \param separator the string to use to separate each child's content, ';' by default
     * \return a wxString containing the content of each child, separated by 'separator'
     */
    static wxString ChildNodesContentToString(const wxXmlNode* node, const wxString& tagName = wxT(""),
                                              const wxString& separator = wxT(";"));

    /**
     * Set the content of node. This function replaces any existing content of node
     * \param node
     * \param text content
     */
    static void SetNodeContent(wxXmlNode* node, const wxString& text);

    /**
     * Set the content of node. This function replaces any existing content of node
     * \param node
     * \param text content
     */
    static void SetCDATANodeContent(wxXmlNode* node, const wxString& text);

    /**
     * Read string property from the given node
     * \param propName the property name
     * \param defaultValue default value to return if no property exist
     */
    static wxString ReadString(const wxXmlNode* node, const wxString& propName,
                               const wxString& defaultValue = wxEmptyString);

    /**
     * Read long property from the given node
     * \param propName the property name
     * \param defaultValue default value to return if no property exist
     */
    static long ReadLong(const wxXmlNode* node, const wxString& propName, long defaultValue = -1);

    /**
     * Try to read long property from the given node
     * If it doesn't exist, don't provide a default value.
     * \param propName the property name
     * \param answer will contain the result if found
     * \return true if answer is valid, false if not found
     */
    static bool ReadLongIfExists(const wxXmlNode* node, const wxString& propName, long& answer);

    /**
     * Read a boolean property from the given node
     * \param propName the property name
     * \param defaultValue default value to return if no property exist
     */
    static bool ReadBool(const wxXmlNode* node, const wxString& propName, bool defaultValue = false);

    /**
     * Try to read a string property from the given node.
     * If it doesn't exist, don't provide a default value.
     * \param propName the property name
     * \param value will contain the result if found
     * \return true if answer is valid, false if not found
     */
    static bool ReadStringIfExists(const wxXmlNode* node, const wxString& propName, wxString& value);

    /**
     * Try to read a boolean property from the given node.
     * If it doesn't exist, don't provide a default value.
     * \param propName the property name
     * \param answer will contain the result if found
     * \return true if answer is valid, false if not found
     */
    static bool ReadBoolIfExists(const wxXmlNode* node, const wxString& propName, bool& answer);

    /**
     * Remove all children of xml node
     * \param node xml node
     */
    static void RemoveChildren(wxXmlNode* node);

    /**
     * @brief read serialized object with version support
     * @param root
     * @param name
     * @param obj
     * @return
     */
    static bool StaticReadObject(wxXmlNode* root, const wxString& name, SerializedObject* obj);
    /**
     * @brief write serialized object with version support
     * @param root
     * @param name
     * @param obj
     * @return
     */
    static bool StaticWriteObject(wxXmlNode* root, const wxString& name, SerializedObject* obj);
};

#endif // XMLUTILS_H