zoukankan      html  css  js  c++  java
  • Ajax实现xml文件数据插入数据库(一)--- 构建解析xml文件的js库

    Ajax实现将xml文件数据插入数据库的过程所涉及到的内容比较多,所以对于该过程的讲解本人打算根据交互的过程将其分为三个部分,第一部分为构建解析xml文件的javascript库,第二部分为ajax与jsp的数据交互,第三部分为javabean实现数据的插入。本文为该过程的第一部分即构建解析xml文件的javascript库。

    本文以以下xml文件为例进行解析:

    ?xml   version="1.0"   encoding="GB18030"?>   
      <states>          
          <users>
               <userId >001
                    <userName>john</userName>
                    <rootManage>commomUser</rootManage>
               </userId>
               <userId>002
                    <userName>jim</userName>
                    <rootManage>manager</rootManage>
               </userId>
               <userId>003
                    <userName>mat</userName>
                    <rootManage>superManager</rootManage>
               </userId>
            </users>
      </states>   


    对于以上xml文件的解析涉我们分四种不同的情况进行:

    (1)取得第任意个标签名为nodeName下的子标签名为childNodeName的值。该函数中nodeName为任意标签名,xmlName为需要解析的xml文件的路径,childNodeName为nodeName下的子标签名,nodeNo指的是第几个nodeName。以上面的xml文件为例,如果我们想要获取第一个标签名为userId标签下的userName标签下的值,那么我们调用该方法所输入的参数应该为:readOneLable("userId","authority.xml,"userName",0),返回结果为一个数组,该数组中盛放的数据便是“john“

    function readOneLable(nodeName,xmlName,childNodeName,nodeNo){
    	var my_array = new Array();
    	//加载xml文件
    	xmlDoc=loadXMLDoc(xmlName);
    				
    	//取得节点名为nodeName的节点
            var d = xmlDoc.getElementsByTagName(nodeName)[nodeNo];				
    	var ab = d.childNodes;
    	for(var i = 0;i<ab.length;i++){
    	      if(ab[i].nodeName == childNodeName){
    			my_array.push(ab[i].childNodes[0].nodeValue);						
    	      }
    	}
    	return my_array;
    }	


    (2)取得标签名为nodeName下的所有子标签名为childNodeName的值。该函数中nodeName为任意标签名,xmlName为需要解析的xml文件的路径,childNodeName为nodeName下的子标签名。以以上xml文件为例,我们需要获取userId标签下的所有userName标签的值,那么我们调用该方法传入的参数为:readAllLable("authority.xml","userId","userName"),调用该方法返回的结果为一个数组,盛放的内容为”jhon“,"jim","mat"。

    function readAllLable(xmlName,nodeName,childNodeName){
    	var my_array = new Array();
    	//加载xml文件
    	xmlDoc=loadXMLDoc(xmlName);
    	var d = xmlDoc.getElementsByTagName(nodeName);
    	for(var i=0;i<d.length;i++){
    		var ab = d[i].childNodes;
    		for(var k=0;k<ab.length;k++){
    		      if(ab[k].nodeName == childNodeName){
    			   my_array.push(ab[k].childNodes[0].nodeValue);
    		      }	
    	        }
             }
    	return my_array;
    }

    (3)取得标第一个签名为nodeName下的所有子标签的值。该函数中nodeName为任意标签名,xmlName为需要解析的xml文件的路径,以以上xml文件为例,我们需要获取第一个标签名为userId下的所有子标签的值,那么调用该方法传入的参数为:readOneChildNode("authority.xml","userId"),调用该方法返回的值为一个数组,该数组中盛放的内容为 ”john“,"commonUser"。

    function readOneChildNode(xmlName,nodeName){
    	var my_array = new Array();
    	//加载xml文件
    	xmlDoc=loadXMLDoc(xmlName);			
    	var d = xmlDoc.getElementsByTagName(nodeName)[0].childNodes;
    	my_array.push(d[0].nodeValue);
    	for(var i=0;i<d.length;i++){
    	     if(d[i].nodeName !="#text"){
    		  my_array.push(d[i].childNodes[0].nodeValue);
    	     }
    	}			
    	return my_array;
    }

    (4)取得所有标签名为nodeName下的所有子标签的值。该函数中nodeName为任意标签名,nodeName为需要解析的xml文件的路径,意义上xml文件为例,我们需要获取标签名为userId下的所有子标签的值,那么调用该方法需要传入的参数为:readAllChildNode("authority.xml","userId"),调用该方法返回的值为一个数组,该数组中盛放的内容为”john“,”commonUser“,”jim“,"manager","mat","superManager"。

    function readAllChildNode(xmlName,nodeName){
    	var my_array = new Array();
    	//加载xml文件
    	xmlDoc=loadXMLDoc(xmlName);
    				
    	var d = xmlDoc.getElementsByTagName(nodeName);
    				
    	for(var i=0;i<d.length;i++){
    		var m = d[i].childNodes;
    		my_array.push(d[i].childNodes[0].nodeValue);
    		for(var k=0;k<m.length;k++){					
    		     if (m[k].nodeName != "#text") {
    			 my_array.push(m[k].childNodes[0].nodeValue);
    		     }					
    	        }					
            }
            return my_array;
    }

    至此,简单的解析xml文件的js库构建完毕,可以根据自己的需要通过调用不同的方法来取得相应节点的值。在下一篇文章中将会介绍使用ajax与jsp进行数据交互。


    Ajax实现xml文件数据插入数据库(二)---ajax实现与jsp的数据交互。

    Ajax实现xml文件数据插入数据库(三)---javaBean实现数据库插入。

  • 相关阅读:
    ubuntu网络配置相关知识(转载)
    git 冲突解决(转载)
    redmine后台运行命令
    CentOS配置网卡,重启网络显示:Device does not seem to be present(转载)
    解决Xshell和vim中文乱码(转载)
    REDHAT6.2配置yum源(64位)(转载)
    Doki Doki Literature Club ZOJ
    CONTINUE...? ZOJ
    Magic Points ZOJ
    Cash Machine (POJ 1276)(多重背包——二进制优化)
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3174632.html
Copyright © 2011-2022 走看看