javascript操作xml(增刪改查)例子代碼

自己做了一個小東西,不是很好,但是對初學來說是一個不錯的例子!

包括了stu.hta(是HTML應用程序);
     stu.xml
注意下面的HTML代碼必須保存爲後綴名爲hta否則當對XML文件進行操作(增刪改)的時候就會提示沒有權限!!

文件stu.hta代碼如下:

Java代碼 複製代碼
  1. <html>   
  2. <head>   
  3. <title> 數據島的顯示 </title>   
  4. <style type="text/css">   
  5. #findPanel   
  6. {   
  7.     position:absolute;   
  8.     width:220px;   
  9.     border:1px solid #666666;   
  10. }   
  11.   
  12. #findPanelTitle   
  13. {   
  14.     height:10px;   
  15.     background-color:#336699;   
  16.     cursor:move;   
  17. }   
  18.   
  19. #findPanelContent   
  20. {   
  21.     padding:5px 5px 5px 5px;   
  22.     background-color:#6699CC;   
  23. }   
  24. </style>   
  25.   
  26. </head>   
  27. <body>   
  28. <SCRIPT LANGUAGE="JavaScript">   
  29. <!--   
  30.   
  31.     var   xmlDoc   =   new   ActiveXObject("Msxml2.DOMDocument");      
  32.     xmlDoc.async   =   false;      
  33.     xmlDoc.resolveExternals   =   false;      
  34.     xmlDoc.load("stu.xml");   
  35.     //alert(xmlDoc.xml);   
  36.     //顯示數據   
  37.     function show(){   
  38.         var vbo = document.getElementById("s").value;   
  39.         if(vbo=="顯示學生信息"){   
  40.            document.getElementById('info').style.visibility='visible';   
  41.            document.getElementById("s").value="隱藏學生信息";   
  42.          }else{   
  43.             document.getElementById('info').style.visibility='hidden';   
  44.             document.getElementById("s").value="顯示學生信息";   
  45.          }   
  46.     }   
  47.     //查找   
  48.     function que(){   
  49.        document.getElementById("ad").style.visibility="visible";   
  50.        document.getElementById("qmd").style.visibility="visible";   
  51.      }   
  52.   
  53.      /**  
  54.       * 解析XML文件函數  
  55.       * @param xmlDoc XML對象  
  56.       * @param name 屬性名稱 格式如:user.name  
  57.       */  
  58.     function getXMLProperty(xmlDoc, name) {   
  59.      var keys = name.split('.');   
  60.      var node = xmlDoc.documentElement;   
  61.      for(var i=0; i<keys.length; i++) {   
  62.       var childs = node.childNodes;   
  63.       var key = keys[i];   
  64.       for(var k=0; k<childs.length; k++) {   
  65.         var child = childs[k];   
  66.         if(child.nodeName == key) {   
  67.           if(child.childNodes.length == 1) {   
  68.            return child.text;   
  69.            } else {   
  70.             node = child;   
  71.             break;   
  72.            }   
  73.        }   
  74.      }   
  75.    }   
  76.    return "";   
  77.   }   
  78.   //返回父節點(通過節點名字和節點值)   
  79.    function getNod(nam,val){   
  80.       var node = xmlDoc.documentElement;   
  81.       var childs = node.childNodes;      
  82.       for (var i=0;i<childs.length ;i++ )   
  83.       {   
  84.        var child = childs[i];   
  85.        var childms = child.childNodes;   
  86.        for(var k=0;k<childms.length;k++){   
  87.        var childm = childms[k];   
  88.         if(childm.nodeName == nam && (childm.text).substring(0,6)==val){   
  89.          //alert(val);   
  90.          return child;   
  91.         }   
  92.        }   
  93.       }   
  94.       return '';   
  95.    }   
  96.    //通過父節點和子節點名返回子節點值   
  97.    function getNodVal(nods,nam){   
  98.        var childms = nods.childNodes;   
  99.        for(var k=0;k<childms.length;k++){   
  100.        var childm = childms[k];   
  101.         if(childm.nodeName == nam){   
  102.          //alert(childm.text);   
  103.          return childm.text;   
  104.         }   
  105.        }   
  106.          
  107.       return '';   
  108.    }   
  109.    //通過父節點和子節點名返回子節點   
  110.    function getCurNod(nods,nam){   
  111.        var childms = nods.childNodes;   
  112.        for(var k=0;k<childms.length;k++){   
  113.        var childm = childms[k];   
  114.         if(childm.nodeName == nam){   
  115.          //alert(childm.text);   
  116.          return childm;   
  117.         }   
  118.        }   
  119.          
  120.       return '';   
  121.    }   
  122.   
  123.     //開始查找   
  124.     function  query(){   
  125.        var renum = /^/d{5}$/;   
  126.        if(renum.exec(xh.value)){   
  127.        if(xmlDoc.selectSingleNode("/學生管理[學生/學號="+xh.value+"]")){   
  128.              var nod = getNod('學號',xh.value);   
  129.              //getNodVal(nod,'姓名');   
  130.              //getNodVal(nod,'性別');   
  131.              //getNodVal(nod,'籍貫');   
  132.            /*document.getElementById("xm").value=xmlDoc.selectSingleNode("/學生管理[學生/學號="+xh.value+"]").selectSingleNode("學生/姓名").text;  
  133.            document.getElementById("xb").value=xmlDoc.selectSingleNode("/學生管理[學生/學號="+xh.value+"]").selectSingleNode("學生/性別").text;  
  134.            document.getElementById("jg").value=xmlDoc.selectSingleNode("/學生管理[學生/學號="+xh.value+"]").selectSingleNode("學生/籍貫").text;  
  135.            document.getElementById("xh").disabled="true";   */  
  136.            document.getElementById("xm").value=getNodVal(nod,'姓名');   
  137.            document.getElementById("xb").value= getNodVal(nod,'性別');   
  138.            document.getElementById("jg").value= getNodVal(nod,'籍貫');   
  139.          }else{   
  140.           alert("該學號還沒有被佔用!");   
  141.          }   
  142.        }else{   
  143.         alert("學號非法!學號5位數字!");   
  144.         return false;   
  145.        }   
  146.     }   
  147.     //修改   
  148.     function mod(){     
  149.         if(info_check()){   
  150.           if(xmlDoc.selectSingleNode("/學生管理[學生/學號="+xh.value+"]")){   
  151.             if(confirm("確認修改?")){   
  152.               var nod = getNod('學號',xh.value);   
  153.               getCurNod(nod,'姓名').text=xm.value;   
  154.               getCurNod(nod,'性別').text=xb.value;   
  155.               getCurNod(nod,'籍貫').text=jg.value;   
  156.               /*  
  157.               xmlDoc.selectSingleNode("/學生管理[學生/學號="+xh.value+"]").selectSingleNode("學生/姓名").text=xm.value;  
  158.               xmlDoc.selectSingleNode("/學生管理[學生/學號="+xh.value+"]").selectSingleNode("學生/性別").text=xb.value;  
  159.               xmlDoc.selectSingleNode("/學生管理[學生/學號="+xh.value+"]").selectSingleNode("學生/籍貫").text=jg.value;  
  160.               */  
  161.               saveXML();   
  162.               //document.getElementById("xh").disabled="false";   
  163.               document.getElementById("xh").value="";   
  164.               document.getElementById("xm").value="";   
  165.               document.getElementById("xb").value="";   
  166.               document.getElementById("jg").value="";   
  167.               document.getElementById("ad").style.visibility="hidden";   
  168.               document.getElementById("qmd").style.visibility="hidden";   
  169.               alert("修改成功!");   
  170.               location.reload();   
  171.             }   
  172.           }else{   
  173.             alert("該學號還沒有被佔用!請按學號查詢再進行修改!");   
  174.             return false;   
  175.           }   
  176.         }   
  177.     }   
  178.     //新增學生   
  179.     function add(){   
  180.         var  vadd = document.getElementById("add").value;   
  181.         if(vadd=="新增"){   
  182.            document.getElementById("xh").value="";   
  183.            document.getElementById("xm").value="";   
  184.            document.getElementById("xb").value="";   
  185.            document.getElementById("jg").value="";   
  186.            document.getElementById("qmd").style.visibility="hidden";   
  187.            document.getElementById('info').style.visibility='hidden';   
  188.            document.getElementById("s").value="顯示學生信息";   
  189.            document.getElementById("ad").style.visibility="visible";   
  190.            document.getElementById("add").value="保存";   
  191.            document.getElementById("can").style.visibility="visible";   
  192.         }else{   
  193.            if(info_check()){   
  194.            add_node();   
  195.            saveXML();   
  196.            document.getElementById("xh").value="";   
  197.            document.getElementById("xm").value="";   
  198.            document.getElementById("xb").value="";   
  199.            document.getElementById("jg").value="";   
  200.            document.getElementById("ad").style.visibility="hidden";   
  201.            document.getElementById("qmd").style.visibility="hidden";   
  202.            document.getElementById("add").value="新增";   
  203.            alert("新增成功!");   
  204.            location.reload();   
  205.            }   
  206.         }   
  207.     }   
  208.        
  209.     //刪除學生   
  210.     function del(){   
  211.        var renum = /^/d{5}$/;   
  212.        if(renum.exec(document.getElementById("xh").value)){   
  213.         if(xmlDoc.selectSingleNode("/學生管理[學生/學號="+xh.value+"]")){   
  214.           if(confirm("確認刪除?")){   
  215.             /*var node = xmlDoc.selectSingleNode("/學生管理[學生/學號="+xh.value+"]");  
  216.             if(node.hasChildNodes()){               
  217.              var kids = node.childNodes;                 
  218.             for(var i=0;i<kids.length;i++){                         
  219.                 del();     
  220.               }     
  221.             }  
  222.              node.parentNode.removeChild(node);  
  223.              */  
  224.               var nod = getNod('學號',xh.value);   
  225.               nod.parentNode.removeChild(nod);   
  226.   
  227.              saveXML();   
  228.              can();   
  229.              alert("刪除成功!");   
  230.              location.reload();   
  231.              }   
  232.         }else{   
  233.             alert("該學號還沒有被佔用!請按學號查詢再進行修改!");   
  234.             return false;   
  235.         }   
  236.       }else{   
  237.         alert("學號非法!爲5位數字!");   
  238.         return false;   
  239.       }   
  240.     }   
  241.   
  242.   
  243.     //取消新增   
  244.     function can(){   
  245.        document.getElementById("xh").value="";   
  246.        document.getElementById("xm").value="";   
  247.        document.getElementById("xb").value="";   
  248.        document.getElementById("jg").value="";   
  249.        document.getElementById("ad").style.visibility="hidden";   
  250.        document.getElementById("can").style.visibility="hidden";   
  251.        document.getElementById("qmd").style.visibility="hidden";   
  252.        document.getElementById("add").value="新增";   
  253.     }   
  254.     //增加結點   
  255.     function add_node(){   
  256.         var  oxh = xmlDoc.createElement("學號");   
  257.         oxh.appendChild(xmlDoc.createTextNode(xh.value));   
  258.         var  oxm = xmlDoc.createElement("姓名");   
  259.         oxm.appendChild(xmlDoc.createTextNode(xm.value));   
  260.         var  oxb = xmlDoc.createElement("性別");   
  261.         oxb.appendChild(xmlDoc.createTextNode(xb.value));   
  262.         var  ojg = xmlDoc.createElement("籍貫");   
  263.         ojg.appendChild(xmlDoc.createTextNode(jg.value));   
  264.   
  265.         var oxs = xmlDoc.createElement("學生");   
  266.         oxs.appendChild(oxh);   
  267.         oxs.appendChild(oxm);   
  268.         oxs.appendChild(oxb);   
  269.         oxs.appendChild(ojg);   
  270.   
  271.         var parent = xmlDoc.selectSingleNode("/學生管理");   
  272.         if(parent.hasChildNodes())   {      
  273.            parent.insertBefore(oxs,parent.firstChild);      
  274.           }else{      
  275.            parent.appendChild(oxs);      
  276.           }    
  277.     }   
  278.     //保存XML   
  279.     function saveXML(){   
  280.         xmlDoc.save("stu.xml");   
  281.     }   
  282.     //驗證新增數據   
  283.     function info_check(){   
  284.       var renum = /^/d{5}$/;   
  285.       var rec = /^[/u4E00-/u9FA5]{2,5}$/;   
  286.       if(!renum.exec(document.getElementById("xh").value)){   
  287.         alert("學號非法!爲5位數字!");   
  288.         return false;   
  289.        }   
  290.       if(!rec.exec(xm.value)){   
  291.         alert("姓名非法!只能是中文最少兩個字,最多不得超過5個字!");   
  292.         return false;   
  293.       }   
  294.       //alert(xb.value!="男");   
  295.       switch(xb.value){   
  296.        case "男":break;   
  297.        case "女":break;   
  298.        default:alert("性別只能是/"男/"或/"女/"!"); return false;   
  299.       }   
  300.   
  301.   
  302.       if(!rec.exec(jg.value)){   
  303.         alert("籍貫非法!只能是中文最少兩個字,最多不得超過5個字!!");   
  304.         return false;   
  305.       }   
  306.       return true;   
  307.     }   
  308.        
  309. //-->   
  310. </SCRIPT>   
  311.   
  312. <input id="s" type=button value="顯示學生信息" οnclick="show();">   
  313. <input id="que" type=button value="精確查詢" οnclick="que();">   
  314. <input id="add" type=button value="新增" οnclick="add();">   
  315. <input id="can" type=button value="取消" οnclick="can();" style="visibility:hidden">   
  316.   
  317. <br>   
  318. <center>   
  319. <div id="ad" style="visibility:hidden">   
  320.   <table><tr><td>學號:   
  321.   <input type=text id="xh" style="ime-mode:disabled" size=5 maxlength=5 onKeyPress="if ((event.keyCode<48 || event.keyCode>57)) event.returnValue=false"><!-- style 用於光閉輸入法 onKeyPress 只能輸入數字-->   
  322.   </td><td>姓名:   
  323.   <input type=text id="xm" size=10 maxlength=5>   
  324.   </td><td>性別:   
  325.   <input type=text id="xb" size=5 maxlength=5>   
  326.   </td><td>籍貫:   
  327.   <input type=text id="jg" size=10 maxlength=5>   
  328.   </td>   
  329.   </tr>   
  330.   </table>   
  331. </div>   
  332. <div id="qmd" style="visibility:hidden">   
  333.   <table>   
  334.   <tr align="center">     
  335.   <td></td>   
  336.   <td><input id="que" type=button value="查詢" οnclick="query();"></td>   
  337.   <td><input id="mod" type=button value="修改" οnclick="mod();"></td>   
  338.   <td><input id="del" type=button value="刪除" οnclick="del();"></td>      
  339.   </tr>   
  340.   </table>   
  341. </div>   
  342. </center>   
  343. <div id="findPanel">   
  344.   <div id="findPanelTitle">可拖動</div>   
  345.   <div id="findPanelContent">   
  346.     <input type="text" size="20" value="a" id="key" οnkeydοwn="javascript:ChckSubmit(event);">   
  347.     <input type="button" value="查找" οnclick="javascript:OnKeySubmit();">   
  348.   </div>   
  349. </div>   
  350. <script language="javascript">   
  351. <!--   
  352. var findPanel = document.getElementById("findPanel");   
  353. var findPanelTitle = document.getElementById("findPanelTitle");   
  354. var findPanelContent = document.getElementById("findPanelContent");   
  355. var findPanel_orgnX = 50;   
  356. var findPanel_orgnY = 50;   
  357.   
  358. //設置物件位置   
  359. findPanel.style.pixelLeft = document.body.scrollLeft + findPanel_orgnX;   
  360. findPanel.style.pixelTop = document.body.scrollTop + findPanel_orgnY;   
  361. //================================================================================   
  362. var foundCnt = 0//已經找到了的結果的數量   
  363.   
  364. //查找入口函數   
  365. function Find(key)   
  366. {   
  367.     if (key == "")   
  368.     {   
  369.         return;   
  370.     }   
  371.        
  372.     if (document.all)   
  373.     {   
  374.         IEFind(key);   
  375.     }   
  376.     else  
  377.     {   
  378.         NSFind(key);   
  379.     }   
  380. }   
  381.   
  382. //瀏覽器爲 IE 系列   
  383. function IEFind(key)   
  384. {   
  385.     var rng = document.body.createTextRange();   
  386.     var found = false;   
  387.     for (var i=0; i<=foundCnt && (found=rng.findText(key)); i++)   
  388.     {   
  389.         rng.moveStart("character"1); //找到,後移一位以查找下一個   
  390.     }   
  391.        
  392.     if (found)   
  393.     {   
  394.          rng.moveStart("character", -1);   
  395.          rng.findText(key);   
  396.          rng.select();   
  397.          rng.scrollIntoView();   
  398.          foundCnt++;   
  399.     }   
  400.     else  
  401.     {   
  402.         if (foundCnt > 0)   
  403.         {   
  404.             //已經查找一遍,找到有符合條件的結果,重新開始查找   
  405.             foundCnt = 0;   
  406.             IEFind(key);   
  407.         }   
  408.         else  
  409.         {   
  410.             //已經查找一遍,沒有找到符合條件的結果   
  411.             alert("文檔搜索完畢。");   
  412.         }   
  413.     }   
  414. }   
  415.   
  416. //瀏覽器爲 NS 系列   
  417. function NSFind(key)   
  418. {   
  419.     if (window.find(key))   
  420.     {   
  421.         foundCnt++;   
  422.     }   
  423.     else  
  424.     {   
  425.         var found = false;   
  426.         while (window.find(key, falsetrue))   
  427.         {   
  428.             found = true;   
  429.         }   
  430.            
  431.         if (found)   
  432.         {   
  433.             //已經查找一遍,找到有符合條件的結果,重新查找也已經開始   
  434.             foundCnt = 1;   
  435.         }   
  436.         else  
  437.         {   
  438.             //已經查找一遍,沒有找到符合條件的結果   
  439.             alert("文檔搜索完畢。");   
  440.         }   
  441.     }   
  442. }       
  443.   
  444. function OnKeySubmit()   
  445. {   
  446.     var key = document.getElementById("key");   
  447.     Find(key.value);   
  448. }   
  449.   
  450. function ChckSubmit(e)   
  451. {   
  452.     if (e.keyCode == 13)   
  453.     {   
  454.         OnKeySubmit();   
  455.     }   
  456. }   
  457. //================================================================================   
  458. function RePosFindPanel()   
  459. {   
  460.     findPanel.style.pixelLeft = document.body.scrollLeft + findPanel_orgnX;   
  461.     findPanel.style.pixelTop = document.body.scrollTop + findPanel_orgnY;   
  462. }   
  463.   
  464. document.body.onscroll = RePosFindPanel;   
  465. document.body.onresize = RePosFindPanel;   
  466. //================================================================================   
  467. //拖拽過程中相關變量   
  468. var draging = false//是否處於拖拽中   
  469. var offsetX = 0;     //X方向左右偏移量   
  470. var offsetY = 0;     //Y方向上下偏移量   
  471.   
  472. //準備拖拽   
  473. function BeforeDrag()   
  474. {   
  475.     if (event.button != 1)   
  476.     {   
  477.         return;   
  478.     }   
  479.     offsetX = document.body.scrollLeft + event.clientX-findPanel.style.pixelLeft;   
  480.     offsetY = document.body.scrollTop + event.clientY-findPanel.style.pixelTop;   
  481.     draging = true;   
  482. }   
  483.   
  484. //拖拽中   
  485. function OnDrag()   
  486. {   
  487.     if(!draging)   
  488.     {   
  489.         return;   
  490.     }   
  491.     //更新位置   
  492.     findPanel_orgnX = event.clientX-offsetX;   
  493.     findPanel_orgnY = event.clientY-offsetY;   
  494.     event.returnValue = false;   
  495.     findPanel.style.pixelLeft = document.body.scrollLeft + event.clientX-offsetX;   
  496.     findPanel.style.pixelTop = document.body.scrollTop + event.clientY-offsetY;   
  497. }   
  498.   
  499. //結束拖拽   
  500. function EndDrag()   
  501. {   
  502.     if (event.button != 1)   
  503.     {   
  504.         return;   
  505.     }   
  506.     draging = false;   
  507. }   
  508.   
  509. findPanelTitle.onmousedown = BeforeDrag;   
  510. document.onmousemove = OnDrag;   
  511. findPanelTitle.onmouseup = EndDrag;   
  512. //-->   
  513. </script>   
  514. <xml id="stu" src="stu.xml">   
  515. </xml>   
  516. <center>   
  517. <div id="info" style="visibility:hidden">   
  518. <table  DATASRC=#stu border=1 style="background-color:#a9eeef; Border-color   
  519. :red;" >   
  520. <caption><h2>學生信息管理</h2></caption>   
  521. <thead>    
  522. <th>學號</th>   
  523. <th>姓名</th>     
  524. <th>性別</th>     
  525. <th>籍貫</th>    
  526. </thead>    
  527. <tr>    
  528. <td>     
  529. <div DATAFLD="學號">     
  530. </td>     
  531. <td>     
  532. <div DATAFLD="姓名">   
  533. </td>     
  534. <td>     
  535. <div DATAFLD="性別">     
  536. </td>     
  537. <td>     
  538. <div DATAFLD="籍貫">    
  539. </td>    
  540. </tr>    
  541. </table>   
  542. </div>   
  543.   
  544.   
  545. </center>   
  546. </body>   
  547. </html>  
<html>
<head>
<title> 數據島的顯示 </title>
<style type="text/css">
#findPanel
{
    position:absolute;
    width:220px;
    border:1px solid #666666;
}

#findPanelTitle
{
    height:10px;
    background-color:#336699;
    cursor:move;
}

#findPanelContent
{
    padding:5px 5px 5px 5px;
    background-color:#6699CC;
}
</style>

</head>
<body>
<SCRIPT LANGUAGE="JavaScript">
<!--

    var   xmlDoc   =   new   ActiveXObject("Msxml2.DOMDocument");   
    xmlDoc.async   =   false;   
    xmlDoc.resolveExternals   =   false;   
    xmlDoc.load("stu.xml");
	//alert(xmlDoc.xml);
    //顯示數據
	function show(){
		var vbo = document.getElementById("s").value;
		if(vbo=="顯示學生信息"){
		   document.getElementById('info').style.visibility='visible';
		   document.getElementById("s").value="隱藏學生信息";
		 }else{
		    document.getElementById('info').style.visibility='hidden';
			document.getElementById("s").value="顯示學生信息";
		 }
	}
	//查找
	function que(){
	   document.getElementById("ad").style.visibility="visible";
	   document.getElementById("qmd").style.visibility="visible";
	 }

     /**
      * 解析XML文件函數
      * @param xmlDoc XML對象
      * @param name 屬性名稱 格式如:user.name
      */
	function getXMLProperty(xmlDoc, name) {
     var keys = name.split('.');
     var node = xmlDoc.documentElement;
     for(var i=0; i<keys.length; i++) {
      var childs = node.childNodes;
      var key = keys[i];
      for(var k=0; k<childs.length; k++) {
        var child = childs[k];
        if(child.nodeName == key) {
          if(child.childNodes.length == 1) {
           return child.text;
           } else {
            node = child;
            break;
           }
       }
     }
   }
   return "";
  }
  //返回父節點(通過節點名字和節點值)
   function getNod(nam,val){
   	  var node = xmlDoc.documentElement;
	  var childs = node.childNodes;	  
	  for (var i=0;i<childs.length ;i++ )
	  {
	   var child = childs[i];
	   var childms = child.childNodes;
	   for(var k=0;k<childms.length;k++){
	   var childm = childms[k];
	    if(childm.nodeName == nam && (childm.text).substring(0,6)==val){
	   	 //alert(val);
		 return child;
	    }
	   }
	  }
	  return '';
   }
   //通過父節點和子節點名返回子節點值
   function getNodVal(nods,nam){
	   var childms = nods.childNodes;
	   for(var k=0;k<childms.length;k++){
	   var childm = childms[k];
	    if(childm.nodeName == nam){
	   	 //alert(childm.text);
		 return childm.text;
	    }
	   }
	  
	  return '';
   }
   //通過父節點和子節點名返回子節點
   function getCurNod(nods,nam){
	   var childms = nods.childNodes;
	   for(var k=0;k<childms.length;k++){
	   var childm = childms[k];
	    if(childm.nodeName == nam){
	   	 //alert(childm.text);
		 return childm;
	    }
	   }
	  
	  return '';
   }

	//開始查找
	function  query(){
	   var renum = /^/d{5}$/;
	   if(renum.exec(xh.value)){
	   if(xmlDoc.selectSingleNode("/學生管理[學生/學號="+xh.value+"]")){
		     var nod = getNod('學號',xh.value);
	         //getNodVal(nod,'姓名');
	     	 //getNodVal(nod,'性別');
		     //getNodVal(nod,'籍貫');
		   /*document.getElementById("xm").value=xmlDoc.selectSingleNode("/學生管理[學生/學號="+xh.value+"]").selectSingleNode("學生/姓名").text;
		   document.getElementById("xb").value=xmlDoc.selectSingleNode("/學生管理[學生/學號="+xh.value+"]").selectSingleNode("學生/性別").text;
		   document.getElementById("jg").value=xmlDoc.selectSingleNode("/學生管理[學生/學號="+xh.value+"]").selectSingleNode("學生/籍貫").text;
		   document.getElementById("xh").disabled="true";	*/
		   document.getElementById("xm").value=getNodVal(nod,'姓名');
		   document.getElementById("xb").value= getNodVal(nod,'性別');
		   document.getElementById("jg").value= getNodVal(nod,'籍貫');
		 }else{
		  alert("該學號還沒有被佔用!");
		 }
	   }else{
	    alert("學號非法!學號5位數字!");
		return false;
	   }
	}
	//修改
	function mod(){	 
	 	if(info_check()){
		  if(xmlDoc.selectSingleNode("/學生管理[學生/學號="+xh.value+"]")){
            if(confirm("確認修改?")){
			  var nod = getNod('學號',xh.value);
			  getCurNod(nod,'姓名').text=xm.value;
			  getCurNod(nod,'性別').text=xb.value;
			  getCurNod(nod,'籍貫').text=jg.value;
			  /*
			  xmlDoc.selectSingleNode("/學生管理[學生/學號="+xh.value+"]").selectSingleNode("學生/姓名").text=xm.value;
			  xmlDoc.selectSingleNode("/學生管理[學生/學號="+xh.value+"]").selectSingleNode("學生/性別").text=xb.value;
			  xmlDoc.selectSingleNode("/學生管理[學生/學號="+xh.value+"]").selectSingleNode("學生/籍貫").text=jg.value;
			  */
			  saveXML();
			  //document.getElementById("xh").disabled="false";
			  document.getElementById("xh").value="";
			  document.getElementById("xm").value="";
			  document.getElementById("xb").value="";
			  document.getElementById("jg").value="";
			  document.getElementById("ad").style.visibility="hidden";
			  document.getElementById("qmd").style.visibility="hidden";
			  alert("修改成功!");
			  location.reload();
		    }
		  }else{
		    alert("該學號還沒有被佔用!請按學號查詢再進行修改!");
			return false;
		  }
		}
	}
	//新增學生
	function add(){
	    var  vadd = document.getElementById("add").value;
		if(vadd=="新增"){
		   document.getElementById("xh").value="";
		   document.getElementById("xm").value="";
		   document.getElementById("xb").value="";
		   document.getElementById("jg").value="";
		   document.getElementById("qmd").style.visibility="hidden";
		   document.getElementById('info').style.visibility='hidden';
		   document.getElementById("s").value="顯示學生信息";
		   document.getElementById("ad").style.visibility="visible";
		   document.getElementById("add").value="保存";
		   document.getElementById("can").style.visibility="visible";
		}else{
		   if(info_check()){
		   add_node();
		   saveXML();
		   document.getElementById("xh").value="";
		   document.getElementById("xm").value="";
		   document.getElementById("xb").value="";
		   document.getElementById("jg").value="";
		   document.getElementById("ad").style.visibility="hidden";
		   document.getElementById("qmd").style.visibility="hidden";
		   document.getElementById("add").value="新增";
		   alert("新增成功!");
		   location.reload();
		   }
		}
	}
	
	//刪除學生
	function del(){
	   var renum = /^/d{5}$/;
	   if(renum.exec(document.getElementById("xh").value)){
	    if(xmlDoc.selectSingleNode("/學生管理[學生/學號="+xh.value+"]")){
		  if(confirm("確認刪除?")){
			/*var node = xmlDoc.selectSingleNode("/學生管理[學生/學號="+xh.value+"]");
			if(node.hasChildNodes()){             
             var kids = node.childNodes;               
            for(var i=0;i<kids.length;i++){                       
                del();   
              }   
            }
             node.parentNode.removeChild(node);
			 */
			  var nod = getNod('學號',xh.value);
			  nod.parentNode.removeChild(nod);

			 saveXML();
			 can();
			 alert("刪除成功!");
			 location.reload();
		     }
		}else{
		    alert("該學號還沒有被佔用!請按學號查詢再進行修改!");
			return false;
		}
	  }else{
	    alert("學號非法!爲5位數字!");
		return false;
	  }
	}


	//取消新增
	function can(){
	   document.getElementById("xh").value="";
	   document.getElementById("xm").value="";
	   document.getElementById("xb").value="";
	   document.getElementById("jg").value="";
	   document.getElementById("ad").style.visibility="hidden";
	   document.getElementById("can").style.visibility="hidden";
	   document.getElementById("qmd").style.visibility="hidden";
	   document.getElementById("add").value="新增";
	}
	//增加結點
	function add_node(){
	  	var  oxh = xmlDoc.createElement("學號");
		oxh.appendChild(xmlDoc.createTextNode(xh.value));
		var  oxm = xmlDoc.createElement("姓名");
		oxm.appendChild(xmlDoc.createTextNode(xm.value));
		var  oxb = xmlDoc.createElement("性別");
		oxb.appendChild(xmlDoc.createTextNode(xb.value));
		var  ojg = xmlDoc.createElement("籍貫");
		ojg.appendChild(xmlDoc.createTextNode(jg.value));

		var oxs = xmlDoc.createElement("學生");
		oxs.appendChild(oxh);
		oxs.appendChild(oxm);
		oxs.appendChild(oxb);
		oxs.appendChild(ojg);

	    var parent = xmlDoc.selectSingleNode("/學生管理");
		if(parent.hasChildNodes())   {   
           parent.insertBefore(oxs,parent.firstChild);   
          }else{   
           parent.appendChild(oxs);   
          } 
	}
	//保存XML
	function saveXML(){
		xmlDoc.save("stu.xml");
	}
	//驗證新增數據
	function info_check(){
	  var renum = /^/d{5}$/;
	  var rec = /^[/u4E00-/u9FA5]{2,5}$/;
	  if(!renum.exec(document.getElementById("xh").value)){
	    alert("學號非法!爲5位數字!");
		return false;
	   }
	  if(!rec.exec(xm.value)){
	    alert("姓名非法!只能是中文最少兩個字,最多不得超過5個字!");
		return false;
	  }
	  //alert(xb.value!="男");
	  switch(xb.value){
	   case "男":break;
	   case "女":break;
	   default:alert("性別只能是/"男/"或/"女/"!"); return false;
	  }


	  if(!rec.exec(jg.value)){
	  	alert("籍貫非法!只能是中文最少兩個字,最多不得超過5個字!!");
		return false;
	  }
	  return true;
	}
	
//-->
</SCRIPT>

<input id="s" type=button value="顯示學生信息" οnclick="show();">
<input id="que" type=button value="精確查詢" οnclick="que();">
<input id="add" type=button value="新增" οnclick="add();">
<input id="can" type=button value="取消" οnclick="can();" style="visibility:hidden">

<br>
<center>
<div id="ad" style="visibility:hidden">
  <table><tr><td>學號:
  <input type=text id="xh" style="ime-mode:disabled" size=5 maxlength=5 onKeyPress="if ((event.keyCode<48 || event.keyCode>57)) event.returnValue=false"><!-- style 用於光閉輸入法 onKeyPress 只能輸入數字-->
  </td><td>姓名:
  <input type=text id="xm" size=10 maxlength=5>
  </td><td>性別:
  <input type=text id="xb" size=5 maxlength=5>
  </td><td>籍貫:
  <input type=text id="jg" size=10 maxlength=5>
  </td>
  </tr>
  </table>
</div>
<div id="qmd" style="visibility:hidden">
  <table>
  <tr align="center">  
  <td></td>
  <td><input id="que" type=button value="查詢" οnclick="query();"></td>
  <td><input id="mod" type=button value="修改" οnclick="mod();"></td>
  <td><input id="del" type=button value="刪除" οnclick="del();"></td>   
  </tr>
  </table>
</div>
</center>
<div id="findPanel">
  <div id="findPanelTitle">可拖動</div>
  <div id="findPanelContent">
    <input type="text" size="20" value="a" id="key" οnkeydοwn="javascript:ChckSubmit(event);">
    <input type="button" value="查找" οnclick="javascript:OnKeySubmit();">
  </div>
</div>
<script language="javascript">
<!--
var findPanel = document.getElementById("findPanel");
var findPanelTitle = document.getElementById("findPanelTitle");
var findPanelContent = document.getElementById("findPanelContent");
var findPanel_orgnX = 50;
var findPanel_orgnY = 50;

//設置物件位置
findPanel.style.pixelLeft = document.body.scrollLeft + findPanel_orgnX;
findPanel.style.pixelTop = document.body.scrollTop + findPanel_orgnY;
//================================================================================
var foundCnt = 0; //已經找到了的結果的數量

//查找入口函數
function Find(key)
{
    if (key == "")
    {
        return;
    }
    
    if (document.all)
    {
        IEFind(key);
    }
    else
    {
        NSFind(key);
    }
}

//瀏覽器爲 IE 系列
function IEFind(key)
{
    var rng = document.body.createTextRange();
    var found = false;
    for (var i=0; i<=foundCnt && (found=rng.findText(key)); i++)
    {
        rng.moveStart("character", 1); //找到,後移一位以查找下一個
    }
    
    if (found)
    {
         rng.moveStart("character", -1);
         rng.findText(key);
         rng.select();
         rng.scrollIntoView();
         foundCnt++;
    }
    else
    {
        if (foundCnt > 0)
        {
            //已經查找一遍,找到有符合條件的結果,重新開始查找
            foundCnt = 0;
            IEFind(key);
        }
        else
        {
            //已經查找一遍,沒有找到符合條件的結果
            alert("文檔搜索完畢。");
        }
    }
}

//瀏覽器爲 NS 系列
function NSFind(key)
{
    if (window.find(key))
    {
        foundCnt++;
    }
    else
    {
        var found = false;
        while (window.find(key, false, true))
        {
            found = true;
        }
        
        if (found)
        {
            //已經查找一遍,找到有符合條件的結果,重新查找也已經開始
            foundCnt = 1;
        }
        else
        {
            //已經查找一遍,沒有找到符合條件的結果
            alert("文檔搜索完畢。");
        }
    }
}    

function OnKeySubmit()
{
    var key = document.getElementById("key");
    Find(key.value);
}

function ChckSubmit(e)
{
    if (e.keyCode == 13)
    {
        OnKeySubmit();
    }
}
//================================================================================
function RePosFindPanel()
{
    findPanel.style.pixelLeft = document.body.scrollLeft + findPanel_orgnX;
    findPanel.style.pixelTop = document.body.scrollTop + findPanel_orgnY;
}

document.body.onscroll = RePosFindPanel;
document.body.onresize = RePosFindPanel;
//================================================================================
//拖拽過程中相關變量
var draging = false; //是否處於拖拽中
var offsetX = 0;     //X方向左右偏移量
var offsetY = 0;     //Y方向上下偏移量

//準備拖拽
function BeforeDrag()
{
    if (event.button != 1)
    {
        return;
    }
    offsetX = document.body.scrollLeft + event.clientX-findPanel.style.pixelLeft;
    offsetY = document.body.scrollTop + event.clientY-findPanel.style.pixelTop;
    draging = true;
}

//拖拽中
function OnDrag()
{
    if(!draging)
    {
        return;
    }
    //更新位置
    findPanel_orgnX = event.clientX-offsetX;
    findPanel_orgnY = event.clientY-offsetY;
    event.returnValue = false;
    findPanel.style.pixelLeft = document.body.scrollLeft + event.clientX-offsetX;
    findPanel.style.pixelTop = document.body.scrollTop + event.clientY-offsetY;
}

//結束拖拽
function EndDrag()
{
    if (event.button != 1)
    {
        return;
    }
    draging = false;
}

findPanelTitle.onmousedown = BeforeDrag;
document.onmousemove = OnDrag;
findPanelTitle.onmouseup = EndDrag;
//-->
</script>
<xml id="stu" src="stu.xml">
</xml>
<center>
<div id="info" style="visibility:hidden">
<table  DATASRC=#stu border=1 style="background-color:#a9eeef; Border-color
:red;" >
<caption><h2>學生信息管理</h2></caption>
<thead> 
<th>學號</th>
<th>姓名</th>  
<th>性別</th>  
<th>籍貫</th> 
</thead> 
<tr> 
<td>  
<div DATAFLD="學號">  
</td>  
<td>  
<div DATAFLD="姓名">
</td>  
<td>  
<div DATAFLD="性別">  
</td>  
<td>  
<div DATAFLD="籍貫"> 
</td> 
</tr> 
</table>
</div>


</center>
</body>
</html>


xml文件如下(stu.xml)

Java代碼 複製代碼
  1. <?xml version="1.0" encoding="gb2312"?>   
  2. <學生管理>   
  3.  <學生>              
  4.  <學號>97001</學號>   
  5.  <姓名>王五</姓名>   
  6.  <性別>男   </性別>   
  7.  <籍貫>上海</籍貫>   
  8.  </學生>   
  9.  <學生>              
  10.  <學號>97002</學號>   
  11.  <姓名>李四 </姓名>   
  12.  <性別>男   </性別>   
  13.  <籍貫>浙江 </籍貫>   
  14.  </學生>   
  15.  <學生>               
  16.   <學號>97006    </學號>   
  17.   <姓名>張三 </姓名>   
  18.   <性別>男</性別>   
  19.   <籍貫>浙江</籍貫>   
  20.  </學生>   
  21. </學生管理>  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章