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实现数据库插入。

  • 相关阅读:
    POJ 2752 Seek the Name, Seek the Fame
    POJ 2406 Power Strings
    KMP 算法总结
    SGU 275 To xor or not to xor
    hihocoder 1196 高斯消元.二
    hihoCoder 1195 高斯消元.一
    UvaLive 5026 Building Roads
    HDU 2196 computer
    Notions of Flow Networks and Flows
    C/C++代码中的笔误
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3174632.html
Copyright © 2011-2022 走看看