diff options
| author | Michael Williamson <mike@zwobble.org> | 2013-04-10 21:07:01 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2013-04-10 21:07:01 +0100 |
| commit | 9a4c6832d7f3cd64744ec525ab763617aa675bad (patch) | |
| tree | 9a4fa47bbccd6f753f94b7a9ff4ad15bd58ea806 /lib/xmlreader.js | |
| parent | e67ed8a6715942beed2c90423d81119c200aa2ec (diff) | |
Explicitly map XML namespaces for safety
Diffstat (limited to 'lib/xmlreader.js')
| -rw-r--r-- | lib/xmlreader.js | 21 |
1 files changed, 19 insertions, 2 deletions
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(); }; |
