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
|
#include "epub-document.h"
static xmlDocPtr xmldocument ;
static xmlNodePtr xmlroot ;
static xmlChar* xmlkey ;
static xmlChar* retval ;
/*Open a XML document for reading */
gboolean
openXmlDocument ( const gchar* filename )
{
xmldocument = xmlParseFile(filename);
if ( xmldocument == NULL )
{
return FALSE ;
}
else
{
return TRUE ;
}
}
/**
*Check if the root value is same as rootname .
*if supplied rootvalue = NULL ,just set root to rootnode .
**/
gboolean
checkRoot(xmlChar* rootname)
{
xmlroot = xmlDocGetRootElement(xmldocument);
if (xmlroot == NULL) {
xmlFreeDoc(xmldocument);
return FALSE;
}
if ( rootname == NULL )
{
return TRUE ;
}
if ( !xmlStrcmp(xmlroot->name,rootname))
{
return TRUE ;
}
else
{
return FALSE;
}
}
xmlChar*
parseXMLchildren( xmlChar* parserfor,
XMLparsereturntype rettype,
xmlChar* attributename )
{
xmlNodePtr topchild,children ;
retval = NULL ;
topchild = xmlroot->xmlChildrenNode ;
while ( topchild != NULL )
{
if ( !xmlStrcmp(topchild->name,parserfor) )
{
if ( rettype == xmlattribute )
{
retval = xmlGetProp(children,attributename);
return retval;
}
else
{
retval = xmlNodeListGetString(xmldocument,topchild->xmlChildrenNode, 1);
return retval ;
}
}
parseChildren( topchild , parserfor,rettype,attributename) ;
topchild = topchild->next ;
}
return retval ;
}
void parseChildren(xmlNodePtr parent,
xmlChar* parserfor,
XMLparsereturntype rettype,
xmlChar* attributename )
{
xmlNodePtr child = parent->xmlChildrenNode ;
while ( child != NULL )
{
if ( !xmlStrcmp(child->name,parserfor))
{
if ( rettype == xmlattribute )
{
retval = xmlGetProp(child,attributename);
}
else
{
retval = xmlNodeListGetString(xmldocument,child->xmlChildrenNode, 1);
}
return ;
}
/*return already if we have retval set*/
if ( retval != NULL )
{
return ;
}
parseChildren(child,parserfor,rettype,attributename) ;
child = child->next ;
}
}
void xmlFreeAll()
{
xmlFreeDoc(xmldocument);
xmlFree(retval);
xmlFree(xmlkey);
}
|