; !(function (BI) { if (BI.isIE()) { XMLSerializer = null; DOMParser = null; } var XML = { Document: { NodeType: { ELEMENT: 1, ATTRIBUTE: 2, TEXT: 3, CDATA_SECTION: 4, ENTITY_REFERENCE: 5, ENTITY: 6, PROCESSING_INSTRUCTION: 7, COMMENT: 8, DOCUMENT: 9, DOCUMENT_TYPE: 10, DOCUMENT_FRAGMENT: 11, NOTATION: 12 } } }; XML.ResultType = { single: 'single', array: 'array' }; XML.fromString = function (xmlStr) { try { var parser = new DOMParser(); return parser.parseFromString(xmlStr, "text/xml"); } catch (e) { var arrMSXML = ["MSXML2.DOMDocument.6.0", "MSXML2.DOMDocument.3.0"]; for (var i = 0; i < arrMSXML.length; i++) { try { var xmlDoc = new ActiveXObject(arrMSXML[i]); xmlDoc.setProperty("SelectionLanguage", "XPath"); xmlDoc.async = false; xmlDoc.loadXML(xmlStr); return xmlDoc; } catch (xmlError) { } } } }; XML.toString = function (xmlNode) { if (!BI.isIE()) { var xmlSerializer = new XMLSerializer(); return xmlSerializer.serializeToString(xmlNode); } else return xmlNode.xml; }; XML.getNSResolver = function (str) { if (!str) { return null; } var list = str.split(' '); var namespaces = {}; for (var i = 0; i < list.length; i++) { var pair = list[i].split('='); var fix = BI.trim(pair[0]).replace("xmlns:", ""); namespaces[fix] = BI.trim(pair[1]).replace(/"/g, "").replace(/'/g, ""); } return function (prefix) { return namespaces[prefix]; }; }; XML.eval = function (context, xpathExp, resultType, namespaces) { if ((BI.isIE() && ('undefined' === typeof(context.selectSingleNode) || 'undefined' === typeof(context.selectNodes)))) { return XML.eval2(context, xpathExp, resultType, namespaces); } else { if (BI.isIE()) { namespaces = namespaces ? namespaces : ""; var doc = (context.nodeType == XML.Document.NodeType.DOCUMENT) ? context : context.ownerDocument; doc.setProperty("SelectionNamespaces", namespaces); var result; if (resultType == this.ResultType.single) { result = context.selectSingleNode(xpathExp); } else { result = context.selectNodes(xpathExp) || []; } doc.setProperty("SelectionNamespaces", ""); return result; } else { var node = context; var xmlDoc = (context.nodeName.indexOf("document") == -1) ? context.ownerDocument : context; var retType = (resultType == this.ResultType.single) ? XPathResult.FIRST_ORDERED_NODE_TYPE : XPathResult.ANY_TYPE; var col = xmlDoc.evaluate(xpathExp, node, XML.getNSResolver(namespaces), retType, null); if (retType == XPathResult.FIRST_ORDERED_NODE_TYPE) { return col.singleNodeValue; } else { var thisColMemb = col.iterateNext(); var rowsCol = []; while (thisColMemb) { rowsCol[rowsCol.length] = thisColMemb; thisColMemb = col.iterateNext(); } return rowsCol; } } } }; XML.eval2 = function (context, xpathExp, resultType, namespaces) { if (resultType !== "single" && resultType !== undefined && resultType !== null) { throw new Error("justep.SimpleXML.eval only be resultType='single', not" + resultType); } if (context === null || context === undefined || xpathExp === null || xpathExp === undefined) { return context; } if (context.nodeType == XML.Document.NodeType.DOCUMENT) { context = context.documentElement; } var childs, i; if (xpathExp.indexOf("/") != -1) { var items = xpathExp.split("/"); var isAbs = xpathExp.substring(0, 1) == "/"; for (i = 0; i < items.length; i++) { var item = items[i]; if (item === "") { continue; } else { var next = null; var ii = i + 1; for (; ii < items.length; ii++) { if (next === null) { next = items[ii]; } else { next = next + "/" + items[ii]; } } if (item == ".") { return this.eval(context, next, resultType); } else if (item == "..") { return this.eval2(context.parentNode, next, resultType); } else if (item == "*") { if (isAbs) { return this.eval2(context, next, resultType); } else { childs = context.childNodes; for (var j = 0; j < childs.length; j++) { var tmp = this.eval2(childs[j], next, resultType); if (tmp !== null) { return tmp; } } return null; } } else { if (isAbs) { if (context.nodeName == item) { return this.eval2(context, next, resultType); } else { return null; } } else { var child = this.getChildByName(context, item); if (child !== null) { return this.eval2(child, next, resultType); } else { return null; } } } } } return null; } else { if ("text()" == xpathExp) { childs = context.childNodes; for (i = 0; i < childs.length; i++) { if (childs[i].nodeType == XML.Document.NodeType.TEXT) { return childs[i]; } } return null; } else { return this.getChildByName(context, xpathExp); } } }; XML.getChildByName = function (context, name) { if (context === null || context === undefined || name === null || name === undefined) { return null; } if (context.nodeType == XML.Document.NodeType.DOCUMENT) { context = context.documentElement; } var childs = context.childNodes; for (var i = 0; i < childs.length; i++) { if (childs[i].nodeType == XML.Document.NodeType.ELEMENT && (childs[i].nodeName == name || name == "*")) { return childs[i]; } } return null; }; XML.appendChildren = function (context, xpathExp, nodes, isBefore) { nodes = (typeof nodes.length != "undefined") ? nodes : [nodes]; var finded = this.eval(context, xpathExp); var count = finded.length; for (var i = 0; i < count; i++) { if (isBefore && finded[i].firstNode) { this._insertBefore(finded[i], nodes, finded[i].firstNode); } else { for (var j = 0; j < nodes.length; j++) { finded[i].appendChild(nodes[j]); } } } return count; }; XML.removeNodes = function (context, xpathExp) { var nodes = this.eval(context, xpathExp); for (var i = 0; i < nodes.length; i++) { nodes[i].parentNode.removeChild(nodes[i]); } }; XML._insertBefore = function (parent, newchildren, refchild) { for (var i = 0; i < newchildren.length; i++) { parent.insertBefore(newchildren[i], refchild); } }; XML.insertNodes = function (context, xpathExp, nodes, isBefore) { nodes = (typeof nodes.length != "undefined") ? nodes : [nodes]; var finded = this.eval(context, xpathExp); var count = finded.length; for (var i = 0; i < count; i++) { var refnode = (isBefore) ? finded[i] : finded[i].nextSibling; this._insertBefore(finded[i].parentNode, nodes, refnode); } return count; }; XML.replaceNodes = function (context, xpathExp, nodes) { nodes = (typeof nodes.length != "undefined") ? nodes : [nodes]; var finded = this.eval(context, xpathExp); var count = finded.length; for (var i = 0; i < count; i++) { var refnode = finded[i]; var parent = refnode.parentNode; this._insertBefore(parent, nodes, refnode); parent.removeChild(refnode); } return count; }; XML.setNodeText = function (context, xpathExp, text) { var finded = this.eval(context, xpathExp, this.ResultType.single); if (finded === null) { return; } if (finded.nodeType == XML.Document.NodeType.ELEMENT) { var textNode = this.eval(finded, "./text()", this.ResultType.single); if (!textNode) { textNode = finded.ownerDocument.createTextNode(""); finded.appendChild(textNode); } textNode.nodeValue = text; } else { finded.nodeValue = text; } return; }; XML.getNodeText = function (context, xpathExp, defaultValue) { var finded = xpathExp ? this.eval(context, xpathExp, this.ResultType.single) : context; if (finded && (finded.nodeType == XML.Document.NodeType.ELEMENT)) { finded = this.eval(finded, "./text()", this.ResultType.single); } return (finded && finded.nodeValue) ? "" + finded.nodeValue : (defaultValue !== undefined) ? defaultValue : null; }; XML.Namespaces = { XMLSCHEMA: "http://www.w3.org/2001/XMLSchema#", XMLSCHEMA_STRING: "http://www.w3.org/2001/XMLSchema#String", XMLSCHEMA_LONG: "http://www.w3.org/2001/XMLSchema#Long", XMLSCHEMA_INTEGER: 'http://www.w3.org/2001/XMLSchema#Integer', XMLSCHEMA_FLOAT: 'http://www.w3.org/2001/XMLSchema#Float', XMLSCHEMA_DOUBLE: 'http://www.w3.org/2001/XMLSchema#Double', XMLSCHEMA_DECIMAL: 'http://www.w3.org/2001/XMLSchema#Decimal', XMLSCHEMA_DATE: 'http://www.w3.org/2001/XMLSchema#Date', XMLSCHEMA_TIME: 'http://www.w3.org/2001/XMLSchema#Time', XMLSCHEMA_DATETIME: 'http://www.w3.org/2001/XMLSchema#DateTime', XMLSCHEMA_BOOLEAN: 'http://www.w3.org/2001/XMLSchema#Boolean', XMLSCHEMA_SYMBOL: 'http://www.w3.org/2001/XMLSchema#Symbol', JUSTEPSCHEMA: "http://www.justep.com/xbiz#", RDF: "http://www.w3.org/1999/02/22-rdf-syntax-ns#", JUSTEP: "http://www.justep.com/x5#", 'get': function (type) { type = type ? type.toLowerCase() : "string"; if ("string" == type) { return XML.Namespaces.XMLSCHEMA_STRING; } else if ("integer" == type) { return XML.Namespaces.XMLSCHEMA_INTEGER; } else if ("long" == type) { return XML.Namespaces.XMLSCHEMA_LONG; } else if ("float" == type) { return XML.Namespaces.XMLSCHEMA_FLOAT; } else if ("double" == type) { return XML.Namespaces.XMLSCHEMA_DOUBLE; } else if ("decimal" == type) { return XML.Namespaces.XMLSCHEMA_DECIMAL; } else if ("date" == type) { return XML.Namespaces.XMLSCHEMA_DATE; } else if ("time" == type) { return XML.Namespaces.XMLSCHEMA_TIME; } else if ("datetime" == type) { return XML.Namespaces.XMLSCHEMA_DATETIME; } else if ("boolean" == type) { return XML.Namespaces.XMLSCHEMA_BOOLEAN; } } }; })(BI);