From 5a046d94ea808963b5e6a5d740d360815b0def6d Mon Sep 17 00:00:00 2001 From: Miika Turkia Date: Wed, 16 Nov 2011 07:12:43 +0200 Subject: [PATCH] Support for importing multiple XSLT formats 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 Signed-off-by: Linus Torvalds --- parse-xml.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/parse-xml.c b/parse-xml.c index bc4d4c5..38be728 100644 --- a/parse-xml.c +++ b/parse-xml.c @@ -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); -- 2.45.2