in asdoc/XML.js [2958:3094]
XML.prototype._toXMLString = function(indentLevel, ancestors) {
indentLevel = typeof indentLevel !== 'undefined' ? indentLevel : 0;
ancestors = typeof ancestors !== 'undefined' ? ancestors : null;
var /** @type {number} */ i = 0;
var /** @type {number} */ nextIndentLevel = 0;
var /** @type {number} */ len = 0;
//var /** @type {number} */ i = 0;
//var /** @type {number} */ len = 0;
var /** @type {Namespace} */ ns;
var /** @type {Array} */ strArr = [];
indentLevel = (isNaN(indentLevel) ? 0 : indentLevel) >> 0;
var /** @type {Array} */ indentArr = [];
for (i = 0; i < indentLevel; i++)
indentArr.push(XML._indentStr);
var /** @type {string} */ indent = indentArr.join("");
/**
* @const
* @type {string}
*/
var nodeType = this.getNodeRef();
var /** @type {string} */ strValue = this.getValue();
if (nodeType == XML.TEXT) {
if (XML.prettyPrinting) {
var /** @type {string} */ v = strValue.trim();
if (v.indexOf('<![CDATA[') == 0) {
return indent + v;
}
return indent + XML.escapeElementValue(v);
}
if (strValue.indexOf('<![CDATA[') == 0)
return strValue;
return XML.escapeElementValue(strValue);
}
if (nodeType == XML.ATTRIBUTE)
return indent + XML.escapeAttributeValue(strValue);
if (nodeType == XML.COMMENT)
return indent + "<!--" + strValue + "-->";
if (nodeType == XML.PROCESSING_INSTRUCTION)
return indent + "<?" + this.name().localName + " " + strValue + "?>";
var /** @type {Array} */ inScopeNS;
if (!ancestors) {
ancestors = [];
inScopeNS = this.inScopeNamespaces();
}
else
inScopeNS = this._namespaces ? this._namespaces : [];
var /** @type {QName} */ myQName = this._name;
var /** @type {Array} */ declarations;
if (ancestors.length == 0) {
declarations = inScopeNS;
} else {
declarations = [];
len = (inScopeNS.length) >> 0;
for (i = 0; i < len; i++) {
if (!XML.namespaceInArray(inScopeNS[i], ancestors))
declarations.push(new Namespace(inScopeNS[i]));
}
}
len = this.attributeLength();
for (i = 0; i < len; i++) {
ns = new Namespace(this._attributes[i].name().getNamespace(declarations.concat(ancestors)));
if (ns.prefix === null) {
ns.setPrefix("");
declarations.push(ns);
}
}
ns = new Namespace(myQName.getNamespace(declarations.concat(ancestors)));
if (ns.prefix === null) {
ns.setPrefix("");
declarations.push(ns);
}
if (XML.prettyPrinting && indentLevel > 0) {
strArr.push(new Array(indentLevel + 1).join(XML._indentStr));
}
strArr.push("<");
if (ns.prefix)
strArr.push(ns.prefix + ":");
strArr.push(myQName.localName);
len = this.attributeLength();
for (i = 0; i < len; i++) {
strArr.push(" ");
var /** @type {QName} */ aName = this._attributes[i].name();
var /** @type {Namespace} */ ans = aName.getNamespace(declarations.concat(ancestors));
if (ans.prefix) {
strArr.push(ans.prefix);
strArr.push(":");
}
strArr.push(aName.localName);
strArr.push('="');
strArr.push(XML.escapeAttributeValue(this._attributes[i].getValue()));
strArr.push('"');
}
for (i = 0; i < declarations.length; i++) {
var /** @type {string} */ decVal = XML.escapeAttributeValue(declarations[i].uri);
if (decVal) {
strArr.push(" xmlns");
if (declarations[i].prefix) {
strArr.push(":");
strArr.push(declarations[i].prefix);
}
strArr.push('="');
strArr.push(decVal);
strArr.push('"');
}
}
len = this.childrenLength();
if (len == 0) {
strArr.push("/>");
return strArr.join("");
}
strArr.push(">");
var /** @type {boolean} */ indentChildren = len > 1 || (len == 1 && this._children[0].getNodeRef() != XML.TEXT);
//var /** @type {number} */ nextIndentLevel = 0;
if (XML.prettyPrinting && indentChildren)
nextIndentLevel = (indentLevel + 1) >> 0;
else
nextIndentLevel = 0;
for (i = 0; i < len; i++) {
if (XML.prettyPrinting && indentChildren)
strArr.push("\n");
strArr.push(this._children[i]._toXMLString(nextIndentLevel, ancestors.concat(declarations)));
}
if (XML.prettyPrinting && indentChildren) {
strArr.push("\n");
if (indentLevel > 0)
strArr.push(new Array(indentLevel + 1).join(XML._indentStr));
}
strArr.push("</");
if (ns.prefix) {
strArr.push(ns.prefix);
strArr.push(":");
}
strArr.push(myQName.localName);
strArr.push(">");
return strArr.join("");
};