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
|
/* Cataract - Static web photo gallery generator
* Copyright (C) 2008 Tomas Bzatek <tbzatek@users.sourceforge.net>
*
* 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 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, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
#ifndef __CGG__XML_PARSER_H__
#define __CGG__XML_PARSER_H__
#include <glib.h>
#include <libxml/xmlmemory.h>
#include <libxml/xpath.h>
#include "properties-table.h"
G_BEGIN_DECLS
typedef struct {
xmlDocPtr doc;
xmlXPathContextPtr xpathCtx;
} TXMLFile;
/*
* xml_parser_load: initialize and load the XML document
*/
TXMLFile * xml_parser_load (const gchar *filename);
/*
* xml_parser_free: close the XML document parser and frees all memory
*/
void xml_parser_free (TXMLFile *file);
/*
* xml_file_get_node_name: retrieve name of the XPath node
*/
gchar * xml_file_get_node_name (TXMLFile *file, const gchar *x_path);
/*
* xml_file_get_node_value: retrieve string value from XPath node
* - multiple matched nodes will be concatenated into one string
* - otherwise please use [0], [1] etc. quantificators
*/
gchar * xml_file_get_node_value (TXMLFile *file, const gchar *x_path);
gchar * xml_file_get_node_value_with_default (TXMLFile *file, const gchar *x_path, const gchar *_default);
/*
* xml_file_get_node_attribute: retrieve attribute value from XPath node
* - returns NULL if node is not present
*/
gchar * xml_file_get_node_attribute (TXMLFile *file, const gchar *x_path, const gchar *attr);
gchar * xml_file_get_node_attribute_with_default (TXMLFile *file, const gchar *x_path, const gchar *attr, const gchar *_default);
/*
* xml_file_get_node_attribute_*: retrieve attribute value from XPath node, storing it in *value, returning TRUE if value has been set.
*/
gboolean xml_file_get_node_attribute_long (TXMLFile *file, const gchar *x_path, const gchar *attr, long int *value);
long int xml_file_get_node_attribute_long_with_default (TXMLFile *file, const gchar *x_path, const gchar *attr, const long int _default);
gboolean xml_file_get_node_attribute_boolean (TXMLFile *file, const gchar *x_path, const gchar *attr, gboolean *value);
gboolean xml_file_get_node_attribute_boolean_with_default (TXMLFile *file, const gchar *x_path, const gchar *attr, const gboolean _default);
gboolean xml_file_get_node_attribute_double (TXMLFile *file, const gchar *x_path, const gchar *attr, double *value);
double xml_file_get_node_attribute_double_with_default (TXMLFile *file, const gchar *x_path, const gchar *attr, const double _default);
/*
* xml_file_get_node_present: existency test of the XPath node
*/
gboolean xml_file_get_node_present (TXMLFile *file, const gchar *x_path);
/*
* xml_file_node_get_children_count: retrieve number of children items of the specified XPath node
*/
int xml_file_node_get_children_count (TXMLFile *file, const gchar *x_path);
/*
* prop_xml_attr_*: retrieve data from the XML file and set the property if suceeded
* prop_xml_attr_*def: retrieve data from the XML file and set the property or default value on failure
*/
#define prop_xml_attr(t, n, xml, x_path, attr) { \
gchar *xxxs = xml_file_get_node_attribute (xml, x_path, attr); \
if (xxxs != NULL) \
properties_table_add_string (t, n, xxxs); \
g_free (xxxs); \
}
#define prop_xml_attr_def(t, n, xml, x_path, attr, _default) { \
gchar *xxxs = xml_file_get_node_attribute_with_default (xml, x_path, attr, _default); \
properties_table_add_string (t, n, xxxs); \
g_free (xxxs); \
}
#define prop_xml_attr_long(t, n, xml, x_path, attr) { \
long int xxxi; \
if (xml_file_get_node_attribute_long (xml, x_path, attr, &xxxi)) \
properties_table_add_int (t, n, xxxi); \
}
#define prop_xml_attr_long_def(t, n, xml, x_path, attr, _default) \
properties_table_add_int (t, n, xml_file_get_node_attribute_long_with_default (xml, x_path, attr, _default))
#define prop_xml_attr_bool(t, n, xml, x_path, attr) { \
gboolean xxxb; \
if (xml_file_get_node_attribute_boolean (xml, x_path, attr, &xxxb)) \
properties_table_add_bool (t, n, xxxb); \
}
#define prop_xml_attr_bool_def(t, n, xml, x_path, attr, _default) \
properties_table_add_bool (t, n, xml_file_get_node_attribute_boolean_with_default (xml, x_path, attr, _default))
#define prop_xml_attr_double(t, n, xml, x_path, attr) { \
double xxxd; \
if (xml_file_get_node_attribute_double (xml, x_path, attr, &xxxd)) \
properties_table_add_double (t, n, xxxd); \
}
#define prop_xml_attr_double_def(t, n, xml, x_path, attr, _default) \
properties_table_add_double (t, n, xml_file_get_node_attribute_double_with_default (xml, x_path, attr, _default))
G_END_DECLS
#endif /* __CGG__XML_PARSER_H__ */
|