#include <libxml/parser.h>
#include <libxml/xpath.h>
#include <libxml/xmlreader.h>
+#include <glob.h>
#include "xml.h"
#include "feierabend.h"
#include "worktime.h"
xmlFreeTextWriter(xmlwriter);
xmlTextReaderClose(xmlreader);
xmlFreeTextReader(xmlreader);
+ xmlreader = NULL;
xmlCleanupCharEncodingHandlers();
xmlDictCleanup();
saldo = NULL;
free(saldostr);
saldostr = NULL;
+}
+
+void copyEntry(xmlTextReaderPtr xmlreader, xmlTextWriterPtr xmlwriter)
+{
+ xmlChar* xmlElemContent = xmlCharStrdup("eintrag");
+ xmlNodePtr xmlnode = xmlTextReaderCurrentNode(xmlreader);
+
+ if (xmlnode->type == XML_ELEMENT_NODE && xmlStrcmp(xmlnode->name, xmlElemContent) == 0) {
+ xmlTextWriterStartElement(xmlwriter, xmlnode->name);
+ copyNodeAttributes(xmlreader, xmlwriter);
+ xmlTextWriterEndElement(xmlwriter);
+ }
+
+ free(xmlElemContent);
+ xmlElemContent = NULL;
+}
+
+void merge(const char* dir)
+{
+ glob_t* files = malloc(sizeof(glob_t));
+ char* pattern = malloc(sizeof(char) * strlen(dir) + 7);
+ sprintf(pattern, "%s/*.xml", dir);
+ glob(pattern, 0, NULL, files);
+
+ if (files->gl_pathc < 1) {
+ globfree(files);
+ free(files);
+ files = NULL;
+ free(pattern);
+ pattern = NULL;
+ printf("ERROR: no xml file found\n");
+ return;
+ }
+
+ xmlChar* xmlElemContent = NULL;
+ xmlTextWriterPtr xmlwriter = xmlNewTextWriterFilename("/dev/stdout", 0);
+ xmlTextWriterSetIndent(xmlwriter, 8);
+ xmlElemContent = xmlCharStrdup("\t");
+ xmlTextWriterSetIndentString(xmlwriter, xmlElemContent);
+ free(xmlElemContent);
+ xmlElemContent = NULL;
+
+ xmlTextReaderPtr xmlreader = xmlReaderForFile(files->gl_pathv[0], "UTF-8", 0);
+ xmlNodePtr xmlnode = NULL;
+
+ xmlTextWriterStartDocument(xmlwriter, "1.0", "UTF-8", NULL);
+
+ xmlTextReaderRead(xmlreader);
+ xmlnode = xmlTextReaderCurrentNode(xmlreader);
+ xmlTextWriterStartElement(xmlwriter, xmlnode->name);
+ copyNodeAttributes(xmlreader, xmlwriter);
+ xmlTextReaderClose(xmlreader);
+ xmlFreeTextReader(xmlreader);
+ xmlreader = NULL;
+
+ for (int i = 0; i < files->gl_pathc; i++) {
+ xmlreader = xmlReaderForFile(files->gl_pathv[i], "UTF-8", 0);
+ while (xmlTextReaderRead(xmlreader) == 1) {
+ copyEntry(xmlreader, xmlwriter);
+ }
+ xmlTextReaderClose(xmlreader);
+ xmlFreeTextReader(xmlreader);
+ xmlreader = NULL;
+ xmlCleanupCharEncodingHandlers();
+ xmlDictCleanup();
+ }
+
+ xmlTextWriterEndElement(xmlwriter);
+ xmlTextWriterEndDocument(xmlwriter);
+
+ xmlFreeTextWriter(xmlwriter);
+ xmlwriter = NULL;
+ xmlCleanupCharEncodingHandlers();
+ xmlDictCleanup();
+
+ free(xmlElemContent);
+ xmlElemContent = NULL;
+ globfree(files);
+ free(files);
+ files = NULL;
+ free(pattern);
+ pattern = NULL;
}
\ No newline at end of file