支持vs 2008 智能自动提示。使用示例:
var dom = DOM('<?xml version="1.0" ?>\r\n\r\n<ROOT><c01 class="d">ddddd</c01><c02 class="e">cccc<c>111</c>dd</c02></ROOT>');
var n = dom.get("*/*[@class='e']").firstChild().next(); //(node c)
alert($s("Text: {0}\n NodeName: {1}\n NodeType: {2}"
, n.text() //"111"
, n.name //c
, n[0].nodeType)); //1function $error(e) {
alert('error:\n\n' + e);
throw e;
}
function $s(str, arglist) {/// <summary>string.Format</summary>
if (arguments.length == 0) return null;
var args = arguments;
return str.replace(/{(\d)}/g, function (m, a) { var s = args[parseInt(a) + 1]; if (s != null && s.constructor == RegExp) { s = s.source; } return s });
}function DOM(xml) { return new DOM.fn.init(xml); };
DOM.fn = {};
DOM.fn.init = function (xml) {
var dom = null;
var $ = this;
$.length = 0;
var isArray = false;
var l = 0;
if (!arguments.length) return;
if (xml && xml.length) l = xml.length;
if (l && xml.constructor != String) isArray = ($.toString.call(xml) === "[object Array]");
$.xml = function () { return ""; };
$.text = function () { return ""; };
$.childs = [];
$.get = function (xpath) {
if (!isArray) {
return DOM(dom && dom.documentElement ? dom.selectSingleNode(xpath) : null);
} else {
for (var i = 0; i < l; i++) {
if (xpath == xml[i].nodeName) return DOM(xml[i]);
}
}
}
$.select = function (xpath) {
return DOM(dom ? dom.selectNodes(xpath) : null);
}
$.next = function () {
return DOM(dom ? dom.nextSibling : null);
}
$.name = "";
$.parent = function () { return DOM(dom ? dom.parentNode : null); }
$.firstChild = function () { return DOM(dom && dom.childNodes && dom.childNodes.length ? dom.childNodes[0] : null); }
$.attr = function (name) { return ""; };
if (!xml) return;
if (isArray) {
$.length = l;
for (var i = 0; i < l; i++) {
$[i] = xml[i];
}
dom = xml[0];
isArray = true;
} else if (xml.constructor == String) {
if (window.DOMParser) {
dom = new window.DOMParser();
dom = dom.parseFromString(xml, 'text/xml');
} else {
dom = new ActiveXObject("Microsoft.XMLDOM");
dom.async = false;
var b = true; try { if (!dom.loadXML) b = false; } catch (e) { }
if (b) if (!dom.loadXML(xml)) with (dom.parseError) { $error($s("Code\t:{0}\nLine\t:{1}\nLinePos\t:{2}\nReason:{3}", errorCode, line, linepos, reason)); }
}
} else {
dom = xml;
}
if (dom) $.name = dom.nodeName;
if (dom && dom.childNodes)
$.childs = dom.childNodes;
if (!isArray) {
$.length = 1;
$[0] = dom;
$.xml = function () { if (window.XMLSerializer) return new XMLSerializer().serializeToString(dom); else return dom.xml; };
$.text = function () { return dom.text || dom.textContent; }
$.attr = function (name) { var a = dom.getAttribute(name); return a ? a.toString() : ""; }
}
}
if (window.XMLDocument) {
XMLDocument.prototype.selectNodes = function (xpath) {
var dom = (this.ownerDocument || this);
var ns = dom.createNSResolver(this.documentElement);
var items = dom.evaluate(xpath, this, ns, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
var arr = [];
for (var i = 0; i < items.snapshotLength; i++) arr.push(items.snapshotItem(i));
return arr;
}
XMLDocument.prototype.selectSingleNode = function (xpath) { var nodes = this.selectNodes(xpath); if (!nodes.length) return null; return nodes[0]; }
Element.prototype.selectNodes = XMLDocument.prototype.selectNodes;
Element.prototype.selectSingleNode = XMLDocument.prototype.selectSingleNode;
}属性:name(节点名)
childs: 子节点
length: 节点数量方法:
firstChild:当前节点的第一个子节点DOM对象
next:当前节点的下一个节点DOM对象
parent:父节点DOM对象
text:节点的文本内容
xml:节点的xml内容
get(xpath):根据xpath选择第一个节点DOM对象,不存在则返回一个length为0的DOM对象
select(xpath):根据xpath选择匹配的节点集合DOM对象
attr(name):获取取节点属性值索引:
item[int n]:如果是DOM集合,获取第n个元素。如:n[0]为第一个