All new
alle new
This commit is contained in:
1 parent
da64472251
commit
5b20adee48
1605 files changed
+396517
-1674
No files matched your search
+69
@@ -0,0 +1,69 @@
|
||||
var promises = require("../promises");
|
||||
var _ = require("underscore");
|
||||
|
||||
var xmldom = require("./xmldom");
|
||||
var nodes = require("./nodes");
|
||||
var Element = nodes.Element;
|
||||
|
||||
exports.readString = readString;
|
||||
|
||||
var Node = xmldom.Node;
|
||||
|
||||
function readString(xmlString, namespaceMap) {
|
||||
namespaceMap = namespaceMap || {};
|
||||
|
||||
try {
|
||||
var document = xmldom.parseFromString(xmlString, "text/xml");
|
||||
} catch (error) {
|
||||
return promises.reject(error);
|
||||
}
|
||||
|
||||
if (document.documentElement.tagName === "parsererror") {
|
||||
return promises.resolve(new Error(document.documentElement.textContent));
|
||||
}
|
||||
|
||||
function convertNode(node) {
|
||||
switch (node.nodeType) {
|
||||
case Node.ELEMENT_NODE:
|
||||
return convertElement(node);
|
||||
case Node.TEXT_NODE:
|
||||
return nodes.text(node.nodeValue);
|
||||
}
|
||||
}
|
||||
|
||||
function convertElement(element) {
|
||||
var convertedName = convertName(element);
|
||||
|
||||
var convertedChildren = [];
|
||||
_.forEach(element.childNodes, function(childNode) {
|
||||
var convertedNode = convertNode(childNode);
|
||||
if (convertedNode) {
|
||||
convertedChildren.push(convertedNode);
|
||||
}
|
||||
});
|
||||
|
||||
var convertedAttributes = Object.create(null);
|
||||
_.forEach(element.attributes, function(attribute) {
|
||||
convertedAttributes[convertName(attribute)] = attribute.value;
|
||||
});
|
||||
|
||||
return new Element(convertedName, convertedAttributes, convertedChildren);
|
||||
}
|
||||
|
||||
function convertName(node) {
|
||||
if (node.namespaceURI) {
|
||||
var mappedPrefix = namespaceMap[node.namespaceURI];
|
||||
var prefix;
|
||||
if (mappedPrefix) {
|
||||
prefix = mappedPrefix + ":";
|
||||
} else {
|
||||
prefix = "{" + node.namespaceURI + "}";
|
||||
}
|
||||
return prefix + node.localName;
|
||||
} else {
|
||||
return node.localName;
|
||||
}
|
||||
}
|
||||
|
||||
return promises.resolve(convertNode(document.documentElement));
|
||||
}
|
||||
Reference in new issue
Block a user