📄 dom.asp
字号:
<%
/*=========================================================================================
* xml结点类
=========================================================================================*/
function Node(name, type, value, deep) {
//成员变量
this.name = name; //结点名称, 对于结点user[@value='sqy'], name='user', type='value', value='sqy'
this.type = type; //结点属性
this.value = value; //结点值
//说明:type-value是属性-值对,因为xml可能有多个属性,所以应该用关联数组来描述, 例如:attributes = new Array(10,2) 10行2列
//this.attributes = new Array(); //结点属性集合,*以后再做*
this.deep = deep; //结点深度
this.child = new Array(); //儿子结点集合
//成员函数
this.parseXML = parseXML; //将该结点树解释成XML格式
this.createEmptyNodeBatch = createEmptyNodeBatch; //批量创建空Node
this.findNodeByXPath = findNodeByXPath; //根据xpath查找并返回结点,如果找到则返回node对象,如果没找到返回null
this.getNodeValueByXPath = getNodeValueByXPath; //根据xpath得到指定结点的值
this.addChildNode = addChildNode; //增加一孩子结点
}
//将该结点树解释成XML格式
function parseXML() {
}
//批量创建空Node
function createEmptyNodeBatch() {
}
//根据xpath查找并返回结点,如果找到则返回node对象,如果没找到返回null
function findNodeByXPath(xpath) {
var item = divFormItemToNodeArr(xpath);
return findNodeByVisit(this, item)
}
//根据xpath得到指定结点的值
function getNodeValueByXPath(xpath) {
var tmpNode = this.findNodeByXPath(xpath);
if(tmpNode!=null)
return tmpNode.value=="null"?"":tmpNode.value;
else
return "";
}
//增加一孩子结点
function addChildNode(node) {
this.child.push(node);
}
/*=========================================================================================*/
%>
<%
/*=========================================================================================
* DOM类
=========================================================================================*/
function DOM(name) {
//成员变量
this.name = name; //DOM名称
this.root = new Node(name,name,name,0); //dom树的根结点
//成员函数
this.buildByXPathArr = buildByXPathArr; //通过XPath数组构建dom对象
this.buildByNodeArr = buildByNodeArr; //通过Node数组构建dom对象
this.getNodeByXPath = getNodeByXPath; //根据xpath得到指定的dom结点
}
//通过XPath数组构建dom对象,数组元素类似于:"list[@type='UserDetail']/UserDetail[@rowNum='0']/classid[@value='abc']"
function buildByXPathArr(strArr) {
var allItem = new Array();
for(var i=0; i<strArr.length; i++) {
var itemNodeArr = divFormItemToNodeArr(strArr[i]);
allItem.push(itemNodeArr);
}
createTree(this.root, allItem);
}
//通过Node数组构建dom对象,数组每个元素类似于:node[1~deep]
function buildByNodeArr(nodeArr) {
createTree(this.root, nodeArr);
}
//根据xpath得到指定的dom结点
function getNodeByXPath(xpath) {
var item = divFormItemToNodeArr(xpath);
return findNodeByVisit(this.root, item)
}
//-------------------------------------------
/*创建form元素结点树*/
function createTree(tree, items) {
for(var i=0; i<items.length; i++) {
createNodeByVisit(tree, items[i]);
}
}
/*遍历创建一个结点*/
function createNodeByVisit(root, item) {
var children = root.child;
if(item.length>0) {
var isFinded = false; //在children中能否找到item[0]结点
var subTreeRoot;
for(var j=0; j<children.length; j++) { //寻找结点
if(children[j].name==item[0].name && children[j].type==item[0].type && children[j].value==item[0].value) {
isFinded = true;
subTreeRoot = children[j];
break;
}
}
if(!isFinded) { //如果没找到
//Response.Write(item[0].name+";"+item[0].type+";"+item[0].value+"<br>");
subTreeRoot = item[0];
children.push(item[0]);
}
item.splice(0,1);
createNodeByVisit(subTreeRoot, item); //继续遍历
}
}
/*遍历查找一个结点*/
function findNodeByVisit(root, item) {
//Response.Write(root.name+"-----");
var children = root.child;
if(item.length>0) {
var isFinded = false; //在children中能否找到item[0]结点
var subTreeRoot;
for(var j=0; j<children.length; j++) { //寻找结点
//if(item.length==1) { //如果是末结点
if(children[j].child.length==0) { //如果是末结点,修改日期:2006-06-27
if(children[j].name.toUpperCase()==item[0].name.toUpperCase()) {
//Response.Write(children[j].name+";;");
isFinded = true;
subTreeRoot = children[j];
break;
}
}
else {
if(children[j].name.toUpperCase()==item[0].name.toUpperCase() && children[j].type==item[0].type && children[j].value==item[0].value) {
isFinded = true;
subTreeRoot = children[j];
break;
}
}
}
if(!isFinded) { //如果没找到
return null;
}
else if(isFinded && item.length==1) { //如果找到了该结点,并且是item的未结点
return subTreeRoot;
}
else if(item.length>1){
item.splice(0,1);
return findNodeByVisit(subTreeRoot, item); //如果找到了该结点,但还不是未结点,继续遍历
}
}
}
/*将form或QueryString里的元素分割成node数组,item的样式:list[@type='UserDetail']/UserDetail[@rowNum='0']/classid[@value='01']*/
function divFormItemToNodeArr(item) {
var nodesArr = new Array();
var tmpArr = item.split("/");
for(var i=0; i<tmpArr.length; i++) {
var node = divStrToNode(tmpArr[i],i);
nodesArr.push(node);
}
return nodesArr;
}
/*将字符串(如:list[@type='UserDetail'],list[@name='User'][@type='UserDetail']=123456)转换为结点对象*/
function divStrToNode(str, deep) {
var nodeName = "";
var nodeType = "";
var nodeValue = "";
var tmpArr = new Array();
tmpArr = str.split("[@");
if(tmpArr.length>0) nodeName = tmpArr[0];
if(tmpArr.length>1) {
/*
tmpArr[1] = tmpArr[1].replace("']","");
tmpArr = tmpArr[1].split("='");
if(tmpArr.length>0) nodeType = tmpArr[0];
if(tmpArr.length>1) nodeValue = tmpArr[1];
*/
tmpArr[1] = tmpArr[1].replace("']","");
nodeType = tmpArr[1].substr(0, tmpArr[1].indexOf("='"));
nodeValue = tmpArr[1].substring(tmpArr[1].indexOf("='")+2,tmpArr[1].length);
nodeValue = nodeValue.replace(/A1B2/g, "/")
}
//Response.Write("<br>"+nodeName+";"+nodeType+";"+nodeValue);
var node = new Node(nodeName, nodeType, nodeValue, deep);
return node;
}
/*=========================================================================================*/
%>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -