]> git.tdb.fi Git - ext/subsurface.git/commitdiff
Support for importing multiple XSLT formats
authorMiika Turkia <miika.turkia@gmail.com>
Wed, 16 Nov 2011 05:12:43 +0000 (07:12 +0200)
committerLinus Torvalds <torvalds@linux-foundation.org>
Mon, 21 Nov 2011 19:33:52 +0000 (11:33 -0800)
Have information of multiple XSLT files on an array for importing
"alien" formatted XML dive log files. Adding support for new XSLT
requires updating the array and adding the XSLT file (provided the
format can be identified by root element of the XML).

Signed-off-by: Miika Turkia <miika.turkia@gmail.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
parse-xml.c

index bc4d4c54661aeb1db4d2462e49625ce8b5997174..38be728da55ffd4c719d0c84080bb06df8199df6 100644 (file)
@@ -1532,14 +1532,28 @@ static xsltStylesheetPtr get_stylesheet(const char *name)
        return NULL;
 }
 
+static struct xslt_files {
+       const char *root;
+       const char *file;
+} xslt_files[] = {
+       { "JDiveLog", "jdivelog2subsurface.xslt" },
+       { NULL, }
+};
+
 xmlDoc *test_xslt_transforms(xmlDoc *doc)
 {
+       struct xslt_files *info = xslt_files;
        xmlDoc *transformed;
        xsltStylesheetPtr xslt = NULL;
        xmlNode *root_element = xmlDocGetRootElement(doc);
-       if (strcasecmp(root_element->name, "JDiveLog") == 0) {
+
+       while ((info->root) && (strcasecmp(root_element->name, info->root) != 0)) {
+               info++;
+       }
+
+       if (info->root) {
                xmlSubstituteEntitiesDefault(1);
-               xslt = get_stylesheet("jdivelog2subsurface.xslt");
+               xslt = get_stylesheet(info->file);
                if (xslt == NULL)
                        return doc;
                transformed = xsltApplyStylesheet(xslt, doc, NULL);