From b9652444ff0da3ffe1eaf6131551a290e2e85217 Mon Sep 17 00:00:00 2001 From: Philipp Schafft Date: Wed, 7 Oct 2020 19:23:12 +0000 Subject: [PATCH] Feature: Workaround for xmlns set as property --- src/xml2json.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/xml2json.c b/src/xml2json.c index d292667d..c2307352 100644 --- a/src/xml2json.c +++ b/src/xml2json.c @@ -502,8 +502,9 @@ static void render_node_generic(json_renderer_t *renderer, xmlDocPtr doc, xmlNod static void render_node(json_renderer_t *renderer, xmlDocPtr doc, xmlNodePtr node, xmlNodePtr parent, struct xml2json_cache *cache) { void (*render)(json_renderer_t *renderer, xmlDocPtr doc, xmlNodePtr node, xmlNodePtr parent, struct xml2json_cache *cache) = NULL; + xmlChar * workaroundProp = xmlGetProp(node, XMLSTR("xmlns")); - if (node->ns == cache->ns) + if (node->ns == cache->ns && !workaroundProp) render = cache->render; if (render == NULL) { @@ -512,6 +513,10 @@ static void render_node(json_renderer_t *renderer, xmlDocPtr doc, xmlNodePtr nod if (node->ns && node->ns->href) href = (const char *)node->ns->href; + if (!href) { + href = (const char *)workaroundProp; + } + if (href) { if (strcmp(href, "http://icecast.org/specs/legacyresponse-0.0.1") == 0) { render = render_node_legacyresponse; @@ -527,6 +532,9 @@ static void render_node(json_renderer_t *renderer, xmlDocPtr doc, xmlNodePtr nod cache->render = render; } + if (workaroundProp) + xmlFree(workaroundProp); + render(renderer, doc, node, parent, cache); }