From 2a945aa8b319b84c4e7334f85dbe04e015407294 Mon Sep 17 00:00:00 2001 From: Bastian Dehn Date: Sun, 23 Jun 2024 12:44:20 +0200 Subject: [PATCH] add copy xml --- src/feierabendxml.c | 63 ++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 57 insertions(+), 6 deletions(-) diff --git a/src/feierabendxml.c b/src/feierabendxml.c index 5e5a0ae..244b021 100644 --- a/src/feierabendxml.c +++ b/src/feierabendxml.c @@ -4,6 +4,7 @@ #include #include #include +#include #include "worktime.h" #include "break.h" #include "time_format.h" @@ -325,6 +326,61 @@ void readLastSaldo(const char* file_path, char* value) xmlCleanupParser(); } +void copyNodeAttributes(xmlTextReaderPtr xmlreader, xmlTextWriterPtr xmlwriter) +{ + int attrCount = xmlTextReaderAttributeCount(xmlreader); + xmlTextReaderMoveToFirstAttribute(xmlreader); + xmlNodePtr xmlnode = xmlTextReaderCurrentNode(xmlreader); + for (int i = 0; i < attrCount; i++) { + xmlTextWriterWriteAttribute(xmlwriter, xmlnode->name, xmlnode->children[0].content); + xmlTextReaderMoveToNextAttribute(xmlreader); + xmlnode = xmlTextReaderCurrentNode(xmlreader); + } +} + + +void addEntry(int begin_hour, + int begin_min, + int end_hour, + int end_min, + const char* file_path) +{ + char* saldo = malloc(sizeof(char) * MAX_STRING_LENGTH); + memset(saldo, 0, MAX_STRING_LENGTH); + + readLastSaldo(file_path, saldo); + + 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(file_path, "UTF-8", 0); + xmlNodePtr xmlnode = NULL; + + xmlTextWriterStartDocument(xmlwriter, "1.0", "UTF-8", NULL); + + while (xmlTextReaderRead(xmlreader) == 1) { + xmlnode = xmlTextReaderCurrentNode(xmlreader); + if (xmlnode->type == XML_ELEMENT_NODE) { + xmlTextWriterStartElement(xmlwriter, xmlnode->name); + copyNodeAttributes(xmlreader, xmlwriter); + xmlTextWriterEndElement(xmlwriter); + } + } + + xmlTextWriterEndDocument(xmlwriter); + + xmlFreeTextWriter(xmlwriter); + xmlFreeTextReader(xmlreader); + + free(saldo); + saldo = NULL; +} + int main(int argc, char* argv[]) { if (argc < 2) { @@ -351,13 +407,8 @@ int main(int argc, char* argv[]) printf("ERROR: %s add \n", argv[0]); return 1; } - char* saldo = malloc(sizeof(char) * MAX_STRING_LENGTH); - memset(saldo, 0, MAX_STRING_LENGTH); - - readLastSaldo(argv[6], saldo); + addEntry(atoi(argv[2]), atoi(argv[3]), atoi(argv[4]), atoi(argv[5]), argv[6]); - free(saldo); - saldo = NULL; return 0; } -- 2.39.5