106 lines
2.6 KiB
JavaScript
106 lines
2.6 KiB
JavaScript
function DOMWriter(writer) {
|
|
this.writer = writer;
|
|
}
|
|
|
|
DOMWriter.prototype.writeNode = function(node) {
|
|
switch (node.nodeType) {
|
|
case node.ELEMENT_NODE:
|
|
this.writeElement(node);
|
|
break;
|
|
|
|
case node.ATTRIBUTE_NODE:
|
|
this.writeAttribute(node);
|
|
break;
|
|
|
|
case node.TEXT_NODE:
|
|
this.writeText(node);
|
|
break;
|
|
|
|
case node.CDATA_SECTION_NODE:
|
|
this.writeCdata(node);
|
|
break;
|
|
|
|
case node.COMMENT_NODE:
|
|
this.writeComment(node);
|
|
break;
|
|
|
|
case node.DOCUMENT_NODE:
|
|
this.writeDocument(node);
|
|
break;
|
|
|
|
case node.DOCUMENT_FRAGMENT_NODE:
|
|
this.writeDocumentFragment(node);
|
|
break;
|
|
|
|
default:
|
|
console.log('Serialization of node type ' + node.nodeType +
|
|
' not supported yet');
|
|
break;
|
|
}
|
|
};
|
|
|
|
|
|
DOMWriter.prototype.writeElement = function(element) {
|
|
var i, prefix, nsURI, name, attr;
|
|
|
|
name = element.nodeName.split(':').slice(-1)[0];
|
|
nsURI = element.namespaceURI || undefined;
|
|
prefix = element.prefix || undefined;
|
|
|
|
this.writer.startElementNS(prefix, name, nsURI);
|
|
|
|
for (i=0; i < element.attributes.length; i++) {
|
|
attr = element.attributes[i];
|
|
if (attr.name.substr(0, 6) !== 'xmlns:') {
|
|
this.writeAttribute(element.attributes[i]);
|
|
}
|
|
}
|
|
|
|
for (i=0; i < element.childNodes.length; i++) {
|
|
this.writeNode(element.childNodes[i]);
|
|
}
|
|
|
|
this.writer.endElement();
|
|
};
|
|
|
|
DOMWriter.prototype.writeAttribute = function(attribute) {
|
|
var name, nsURI, prefix;
|
|
|
|
name = attribute.name.split(':').slice(-1)[0];
|
|
nsURI = attribute.namespaceURI || undefined;
|
|
prefix = attribute.prefix || undefined;
|
|
|
|
this.writer.startAttributeNS(prefix, name, nsURI);
|
|
this.writer.writeString(attribute.value);
|
|
this.writer.endAttribute();
|
|
};
|
|
|
|
DOMWriter.prototype.writeText = function(text) {
|
|
this.writer.writeString(text.data);
|
|
};
|
|
|
|
DOMWriter.prototype.writeCdata = function(cdata) {
|
|
this.writer.startCdata();
|
|
this.writer.writeString(cdata.data);
|
|
this.writer.endCdata();
|
|
};
|
|
|
|
DOMWriter.prototype.writeComment = function(comment) {
|
|
this.writer.startComment();
|
|
this.writer.writeString(comment.data);
|
|
this.writer.endComment();
|
|
}
|
|
|
|
DOMWriter.prototype.writeDocument = function(doc) {
|
|
this.writeElement(doc.documentElement);
|
|
}
|
|
|
|
DOMWriter.prototype.writeDocumentFragment = function(docfrag) {
|
|
var i;
|
|
for (i=0; i < docfrag.childNodes.length; i++) {
|
|
this.writeNode(docfrag.childNodes[i]);
|
|
}
|
|
}
|
|
|
|
exports.DOMWriter = DOMWriter;
|