From 9a4c6832d7f3cd64744ec525ab763617aa675bad Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Wed, 10 Apr 2013 21:07:01 +0100 Subject: Explicitly map XML namespaces for safety --- lib/xmlreader.js | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) (limited to 'lib/xmlreader.js') diff --git a/lib/xmlreader.js b/lib/xmlreader.js index 7c15019..f5a43ae 100644 --- a/lib/xmlreader.js +++ b/lib/xmlreader.js @@ -5,7 +5,9 @@ var _ = require("underscore"); exports.read = read; exports.Element = Element; -function read(xmlString) { +function read(xmlString, namespaceMap) { + namespaceMap = namespaceMap || {}; + var parser = sax.parser(true, {xmlns: true, position: false}); //~ parser.onerror = function(error) { @@ -25,12 +27,27 @@ function read(xmlString) { return attribute.value; }); - var element = new Element(node.name, attributes); + var element = new Element(generateTagName(node), attributes); currentElement.children.push(element); stack.push(currentElement); currentElement = element }; + function generateTagName(node) { + if (node.uri) { + var mappedPrefix = namespaceMap[node.uri]; + var prefix; + if (mappedPrefix) { + prefix = mappedPrefix; + } else { + prefix = "{" + node.uri + "}"; + } + return prefix + ":" + node.local; + } else { + return node.local; + } + } + parser.onclosetag = function(node) { currentElement = stack.pop(); }; -- cgit v1.2.3