summaryrefslogtreecommitdiff
path: root/backend/epub/epub-document.c
diff options
context:
space:
mode:
Diffstat (limited to 'backend/epub/epub-document.c')
-rw-r--r--backend/epub/epub-document.c125
1 files changed, 125 insertions, 0 deletions
diff --git a/backend/epub/epub-document.c b/backend/epub/epub-document.c
new file mode 100644
index 00000000..c6bbf684
--- /dev/null
+++ b/backend/epub/epub-document.c
@@ -0,0 +1,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);
+} \ No newline at end of file