Parse.js
上传用户:kimgenplus
上传日期:2016-06-05
资源大小:20877k
文件大小:4k
- /*
- Copyright (c) 2004-2006, The Dojo Foundation
- All Rights Reserved.
- Licensed under the Academic Free License version 2.1 or above OR the
- modified BSD license. For more information on Dojo licensing, see:
- http://dojotoolkit.org/community/licensing.shtml
- */
- dojo.provide("dojo.xml.Parse");
- dojo.require("dojo.dom");
- dojo.xml.Parse = function () {
- var isIE = ((dojo.render.html.capable) && (dojo.render.html.ie));
- function getTagName(node) {
- try {
- return node.tagName.toLowerCase();
- }
- catch (e) {
- return "";
- }
- }
- function getDojoTagName(node) {
- var tagName = getTagName(node);
- if (!tagName) {
- return "";
- }
- if ((dojo.widget) && (dojo.widget.tags[tagName])) {
- return tagName;
- }
- var p = tagName.indexOf(":");
- if (p >= 0) {
- return tagName;
- }
- if (tagName.substr(0, 5) == "dojo:") {
- return tagName;
- }
- if (dojo.render.html.capable && dojo.render.html.ie && node.scopeName != "HTML") {
- return node.scopeName.toLowerCase() + ":" + tagName;
- }
- if (tagName.substr(0, 4) == "dojo") {
- return "dojo:" + tagName.substring(4);
- }
- var djt = node.getAttribute("dojoType") || node.getAttribute("dojotype");
- if (djt) {
- if (djt.indexOf(":") < 0) {
- djt = "dojo:" + djt;
- }
- return djt.toLowerCase();
- }
- djt = node.getAttributeNS && node.getAttributeNS(dojo.dom.dojoml, "type");
- if (djt) {
- return "dojo:" + djt.toLowerCase();
- }
- try {
- djt = node.getAttribute("dojo:type");
- }
- catch (e) {
- }
- if (djt) {
- return "dojo:" + djt.toLowerCase();
- }
- if ((dj_global["djConfig"]) && (!djConfig["ignoreClassNames"])) {
- var classes = node.className || node.getAttribute("class");
- if ((classes) && (classes.indexOf) && (classes.indexOf("dojo-") != -1)) {
- var aclasses = classes.split(" ");
- for (var x = 0, c = aclasses.length; x < c; x++) {
- if (aclasses[x].slice(0, 5) == "dojo-") {
- return "dojo:" + aclasses[x].substr(5).toLowerCase();
- }
- }
- }
- }
- return "";
- }
- this.parseElement = function (node, hasParentNodeSet, optimizeForDojoML, thisIdx) {
- var tagName = getTagName(node);
- if (isIE && tagName.indexOf("/") == 0) {
- return null;
- }
- try {
- var attr = node.getAttribute("parseWidgets");
- if (attr && attr.toLowerCase() == "false") {
- return {};
- }
- }
- catch (e) {
- }
- var process = true;
- if (optimizeForDojoML) {
- var dojoTagName = getDojoTagName(node);
- tagName = dojoTagName || tagName;
- process = Boolean(dojoTagName);
- }
- var parsedNodeSet = {};
- parsedNodeSet[tagName] = [];
- var pos = tagName.indexOf(":");
- if (pos > 0) {
- var ns = tagName.substring(0, pos);
- parsedNodeSet["ns"] = ns;
- if ((dojo.ns) && (!dojo.ns.allow(ns))) {
- process = false;
- }
- }
- if (process) {
- var attributeSet = this.parseAttributes(node);
- for (var attr in attributeSet) {
- if ((!parsedNodeSet[tagName][attr]) || (typeof parsedNodeSet[tagName][attr] != "array")) {
- parsedNodeSet[tagName][attr] = [];
- }
- parsedNodeSet[tagName][attr].push(attributeSet[attr]);
- }
- parsedNodeSet[tagName].nodeRef = node;
- parsedNodeSet.tagName = tagName;
- parsedNodeSet.index = thisIdx || 0;
- }
- var count = 0;
- for (var i = 0; i < node.childNodes.length; i++) {
- var tcn = node.childNodes.item(i);
- switch (tcn.nodeType) {
- case dojo.dom.ELEMENT_NODE:
- var ctn = getDojoTagName(tcn) || getTagName(tcn);
- if (!parsedNodeSet[ctn]) {
- parsedNodeSet[ctn] = [];
- }
- parsedNodeSet[ctn].push(this.parseElement(tcn, true, optimizeForDojoML, count));
- if ((tcn.childNodes.length == 1) && (tcn.childNodes.item(0).nodeType == dojo.dom.TEXT_NODE)) {
- parsedNodeSet[ctn][parsedNodeSet[ctn].length - 1].value = tcn.childNodes.item(0).nodeValue;
- }
- count++;
- break;
- case dojo.dom.TEXT_NODE:
- if (node.childNodes.length == 1) {
- parsedNodeSet[tagName].push({value:node.childNodes.item(0).nodeValue});
- }
- break;
- default:
- break;
- }
- }
- return parsedNodeSet;
- };
- this.parseAttributes = function (node) {
- var parsedAttributeSet = {};
- var atts = node.attributes;
- var attnode, i = 0;
- while ((attnode = atts[i++])) {
- if (isIE) {
- if (!attnode) {
- continue;
- }
- if ((typeof attnode == "object") && (typeof attnode.nodeValue == "undefined") || (attnode.nodeValue == null) || (attnode.nodeValue == "")) {
- continue;
- }
- }
- var nn = attnode.nodeName.split(":");
- nn = (nn.length == 2) ? nn[1] : attnode.nodeName;
- parsedAttributeSet[nn] = {value:attnode.nodeValue};
- }
- return parsedAttributeSet;
- };
- };