0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
| |
String.prototype.escape = function() {
return this.replace("<", "<")
.replace(">", ">")
.replace("\"", """)
.replace("'", "'")
.replace("&", "&");
}
function format(node, indent, indentUnit, crlf) {
var s = "";
if (node.nodeName == "#comment") {
s += "<!--" + node.nodeValue.escape() + "-->";
} else if (node.nodeName == "#cdata-section") {
s += "<![CDATA[" + node.nodeValue + "]]>"; } else if (node.nodeName == "#text") {
s += node.nodeValue.escape();
} else {
s += indent + "<" + node.nodeName;
var ats = node.attributes;
if (ats != null) {
for (var i=0; i<ats.length; i++) {
s += " " + ats[i].name + "=\"" + ats[i].value.escape() + "\"";
}
}
var childs = node.childNodes;
if (childs == null || childs.length == 0) {
s += " />";
} else {
s += ">";
if (childs[0].nodeName != "#text") {
s += crlf;
}
for (var i=0; i<childs.length; i++) {
if (childs[i].nodeName != "#text" && !(i>0 && childs[i-1].nodeName == "#text")) {
s += indent + indentUnit;
}
s += format(childs[i], indent + indentUnit, indentUnit, crlf).replace(/^\s+/, "").replace(/\s+$/, "");
if (childs[i].nodeName != "#text" && !(i<childs.length-1 && childs[i+1].nodeName == "#text")) {
s += crlf;
}
}
if (! (childs.length == 0 || (childs[childs.length-1].nodeName == "#text")) ) {
s += indent;
}
s += "</" + node.nodeName + ">" + crlf;
}
}
return s;
}
function main() {
var raw = Editor.GetSelectedString();
var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async = false;
xmlDoc.loadXML(raw);
if (xmlDoc.documentElement == null) return;
var s = "";
s += format(xmlDoc.documentElement, "", " ", "\r\n");
Editor.InsText(s);
}
main();
|