[PATCH 1/2] Support for importing multiple XSLT formats

Miika Turkia miika.turkia at gmail.com
Tue Nov 15 21:12:43 PST 2011


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 at gmail.com>
---
 parse-xml.c |   18 ++++++++++++++++--
 1 files 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);
-- 
1.7.5.4



More information about the subsurface mailing list