]> gitweb.hhaalo.de Git - feierabend.git/commitdiff
add copy xml
authorBastian Dehn <hhaalo@arcor.de>
Sun, 23 Jun 2024 10:44:20 +0000 (12:44 +0200)
committerBastian Dehn <hhaalo@arcor.de>
Sun, 23 Jun 2024 10:44:20 +0000 (12:44 +0200)
src/feierabendxml.c

index 5e5a0aee2decedd11b306396de3b112478c68f09..244b021ea36c08b2156cd3bbcbbb08ab397124b2 100644 (file)
@@ -4,6 +4,7 @@
 #include <libxml/xmlwriter.h>
 #include <libxml/parser.h>
 #include <libxml/xpath.h>
+#include <libxml/xmlreader.h>
 #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 <begin_hours> <begin_minutes> <end_hours> <end_minutes> <inputfile>\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;
        }