diff options
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(); }; |
