龍行天下

            政 博
          隨筆 - 23, 文章 - 0, 評論 - 12, 引用 - 0
          數據加載中……

          對xml進行增、刪、改的很好例子

          rule.hta
          ================

          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
          <HTML>
          <HEAD>
          <TITLE>XML Editer</TITLE>
          <HTA:APPLICATION ID="oHTA"
          APPLICATIONNAME="myApp"
          BORDER="thick"
          BORDERSTYLE="normal"
          CAPTION="yes"
          ContextMenu="yes"
          ICON=""
          MAXIMIZEBUTTON="yes"
          MINIMIZEBUTTON="yes"
          scroll="no"
          selection="no"
          SHOWINTASKBAR="yes"
          SINGLEINSTANCE="yes"
          SYSMENU="yes"
          VERSION="1.0"
          WINDOWSTATE="normal"
          >

          <style type="text/css">
          </style>
          </HEAD>

          <script language="javascript">

          // load the xml file
          var xmlDoc = new ActiveXObject("Msxml2.DOMDocument");
          xmlDoc.async = false;
          xmlDoc.resolveExternals = false;
          xmlDoc.load("rule.xml");

          // load the xsl file
          var xslDoc = new ActiveXObject("Msxml2.FreeThreadedDOMDocument");
          xslDoc.async = false;
          xslDoc.resolveExternals = false;
          xslDoc.load("rule.xsl");

          // create the xslt object
          var xslt = new ActiveXObject("Msxml2.XSLTemplate");
          xslt.stylesheet = xslDoc;
          var xslProc = xslt.createProcessor();
          xslProc.input = xmlDoc;

          var checked_count = 0;
          var cur_page = 1;
          var total_page = 1;

          function OutputDocument(number){
          xslProc.addParameter("ename", number);
          xslProc.addParameter("startno", (cur_page - 1)*10);
          xslProc.addParameter("endno", cur_page*10);
          xslProc.transform();

          return xslProc.output;
          }

          function delete_node(node){
          if( node.hasChildNodes() ) { 
          var kids = node.childNodes; 
          for(var i=0;i<kids.length;i++) { 
          delete_node(kids);
          }
          }
          node.parentNode.removeChild(node);
          }

          function delete_rule(id){
          var node = xmlDoc.selectSingleNode("/rules/rule[event/id="+id+"]");
          delete_node(node);
          }

          function modify_node(node){
          node.selectSingleNode("event/id").text = modify_id.value;
          node.selectSingleNode("event/name").text = modify_name.value;
          if( modify_state.checked ) {
          node.selectSingleNode("enable").text = "true";
          } else {
          node.selectSingleNode("enable").text = "false";
          }
          }

          function modify_rule(id){
          var node = xmlDoc.selectSingleNode("/rules/rule[event/id="+id+"]");
          modify_node(node);
          }

          function add_rule(){
          var id = xmlDoc.createElement("id");
          id.appendChild(xmlDoc.createTextNode(add_id.value));
          var name = xmlDoc.createElement("name");
          name.appendChild(xmlDoc.createTextNode(add_name.value));

          var event = xmlDoc.createElement("event");
          event.appendChild(id);
          event.appendChild(name);

          var enable = xmlDoc.createElement("enable");
          if( add_state.checked ) {
          enable.appendChild(xmlDoc.createTextNode("true"));
          } else {
          enable.appendChild(xmlDoc.createTextNode("false"));
          }

          var rule = xmlDoc.createElement("rule");
          rule.appendChild(event);
          rule.appendChild(enable);

          var parent = xmlDoc.selectSingleNode("/rules");
          if( parent.hasChildNodes() ) {
          parent.insertBefore(rule, parent.firstChild);
          } else {
          parent.appendChild(rule);
          }
          }

          function gotoPage(pageno){
          if( pageno < 1 ) {
          cur_page = 1;
          } else if( pageno >= total_page ) {
          cur_page = total_page;
          } else {
          cur_page = pageno;
          }
          Transform();
          }

          function saveXML(){
          xmlDoc.save("rule.xml");
          }

          function protectsubmit(val){
          if( val == 1 ) { //add
          if( add_id.value < 10000 || add_name.value == "" ) {
          window.alert("事件號必須是5位整數且事件名不能為空");
          } else if( xmlDoc.selectSingleNode("/rules/rule/event/id[. = " + add_id.value + "]") ) {
          window.alert("事件號" + add_id.value + "已經存在");
          } else {
          add_rule();
          saveXML();
          Transform();
          }
          } else if( val == 2 ) { //modify
          var id = viewTable.rows[getFirstCheckedLine()].cells[2].innerText;
          if( modify_id.value < 10000 || modify_name.value == "" ) {
          window.alert("事件號必須是5位整數且事件名不能為空");
          } else if( id != modify_id.value && xmlDoc.selectSingleNode("/rules/rule/event/id[. = " + modify_id.value + "]") ) {
          window.alert("事件號" + modify_id.value + "已經存在");
          } else {
          if( confirm("確認修改?") ) {
          modify_rule(id);
          saveXML();
          Transform();
          }
          }
          } else if( val == 3 ) { //delete
          if( !confirm("確認刪除?") ) {
          return;
          }
          for( var i = 1; i < viewTable.rows.length; i++ ) {
          var id = viewTable.rows.cells[2].innerText;
          if( eval("viewchk_" + id + ".checked") == true ) {
          delete_rule(id)
          }
          }
          saveXML();
          Transform();
          } else if( val == 4 ) { //select all
          checked_count = viewTable.rows.length - 1;
          for( var i = 1; i < viewTable.rows.length; i++ ) {
          var id = viewTable.rows.cells[2].innerText;
          eval("viewchk_" + id + ".checked = true");
          }
          changeState();
          } else if( val == 5 ) { //cancel all
          checked_count = 0;
          for( var i = 1; i < viewTable.rows.length; i++ ) {
          var id = viewTable.rows.cells[2].innerText;
          eval("viewchk_" + id + ".checked = false");
          }
          changeState();
          }
          }

          function getFirstCheckedLine(){
          for( var i = 1; i < viewTable.rows.length; i++ ) {
          var id = viewTable.rows.cells[2].innerText;
          if( eval("viewchk_" + id + ".checked") == true ) {
          return i;
          }
          }
          return 0;
          }

          function checkOVItem(val){
          if( eval("viewchk_" + val+".checked") == true ) {
          checked_count++;
          } else {
          checked_count--;
          }
          changeState();
          }

          function changeState(){
          if( checked_count ) {
          delete_btn.disabled = false;
          cancel_all_btn.disabled = false;
          } else {
          delete_btn.disabled = true;
          cancel_all_btn.disabled = true;
          }
          if( (checked_count + 1) == viewTable.rows.length ) {
          select_all_btn.disabled = true;
          } else {
          select_all_btn.disabled = false;
          }

          if( checked_count == 1 ) {
          modify_btn.disabled = false;
          modify_id.disabled = false;
          modify_name.disabled = false;
          modify_state.disabled = false;
          var id = getFirstCheckedLine();
          modify_id.value = viewTable.rows(id).cells(2).innerText;
          modify_name.value = viewTable.rows(id).cells(3).innerText;
          if( viewTable.rows(id).cells(1).innerText == "有效" ) {
          modify_state.checked = true;
          } else {
          modify_state.checked = false;
          }
          } else {
          modify_btn.disabled = true;
          modify_id.disabled = true;
          modify_name.disabled = true;
          modify_state.disabled = true;
          modify_id.value="請選擇一條規則";
          modify_name.value="請選擇一條規則";
          }
          }

          function showPageInfo(){
          if( total_item.value == 0 ) {
          total_page = 1;
          } else {
          total_page = Math.floor((9 + parseInt(total_item.value)) / 10);
          }
          var txt = " 共"+total_item.value+"條記錄";
          var prev_page = cur_page - 1;
          var next_page = parseInt(cur_page) + 1;
          if( cur_page > 1 ) {
          txt += " <input type='button' value='<' onClick='gotoPage(" + prev_page + ")'/>"
          } else {
          txt += " <input type='button' value='<' onClick='gotoPage(" + prev_page + ")' disabled/>"
          }
          if( cur_page < total_page ) {
          txt += " <input type='button' value='>' onClick='gotoPage(" + next_page + ")'/>"
          } else {
          txt += " <input type='button' value='>' onClick='gotoPage(" + next_page + ")' disabled/>"
          }

          txt += " 第<input type='text' id='page_number' size='4' maxlength='4' value='" + cur_page + "' onBlur='gotoPage(this.value)'/>頁 共" + total_page + "頁";
          page_info.innerHTML = txt;
          // window.alert(txt);
          }

          function Transform(){
          var txt = document.getElementById("ename").value;
          var str = OutputDocument(txt);
          rule_list.innerHTML = str;
          checked_count = 0;
          showPageInfo();
          changeState();
          // window.alert(str);
          }
          </script>

          <BODY onLoad="Transform()">

          <table width="550" border="1" cellpadding="0" cellspacing="0" style="border-collapse:collapse;">
          <tr>
          <td>
          <table width="100%" border="0" cellpadding="0" cellspacing="0" style="border-collapse:collapse;">
          <TR height=5><td colspan=10 style="font-size:0px;"></td></TR>
          <TR height=25>
          <td colspan=3 align=center>事件名包含:</td>
          <td colspan=3 align=center><input type="text" value="" id="ename" size="35" maxlength="16"/></td>
          <td colspan=4><input type="button" value="搜索" onClick="Transform()"/></td>
          </TR>
          <TR height=1><td colspan=10 bgcolor=#2b7297></td></TR>
          <TR height=30>
          <td width=45 align=center><b>添加</b></td>
          <td width=5 align=center><font color=gray>|</font></td>
          <td width=50 align=center>事件號</td>
          <td width=55 align=center><input type="text" name="add_id" value="" size="5" maxlength="5" onkeyup="this.value=this.value.replace(/\D/g,'')" onafterpaste="this.value=this.value.replace(/\D/g,'')"></td>
          <td width=55 align=center>事件名</td>
          <td width=* align=center><input type="text" name="add_name" maxlength="48" value=""></td>
          <td width=70 align=center>是否使用</td>
          <td width=30 align=center>
          <input type='checkbox' name='add_state' checked>
          </td> 
          <td width=5 align=center><font color=gray>|</font></td>
          <td width=70 align=center><input type="button" name="add_btn" value="確定" onClick="protectsubmit(1)"></td>
          </TR>
          <TR height=1><td colspan=10 bgcolor=#2b7297></td></TR>
          <TR height=30>
          <td width=45 align=center><b>修改</b></td>
          <td width=5 align=center><font color=gray>|</font></td>
          <td width=50 align=center>事件號</td>
          <td width=55 align=center>
          <input type="text" name="modify_id" value="<請選擇一條規則>" size="5" maxlength="5" onkeyup="this.value=this.value.replace(/\D/g,'')" onafterpaste="this.value=this.value.replace(/\D/g,'')" disabled></td>
          <td width=55 align=center>事件名</td>
          <td width=* align=center>
          <input type="text" name="modify_name" maxlength="48" value="<請選擇一條規則>" disabled></td>
          <td width=70 align=center>是否使用</td>
          <td width=30 align=center>
          <input type='checkbox' name='modify_state' disabled>
          </td> 
          <td width=5 align=center><font color=gray>|</font></td>
          <td width=70 align=center><input type="button" name="modify_btn" value="確定" onClick="protectsubmit(2)"></td>
          </TR>
          <TR height=1><td colspan=10 bgcolor=#2b7297></td></TR>
          <TR height=30>
          <td colspan=5 align=left class=tablefont></td>
          <td align=right><input type="button" name="select_all_btn" value="全部選擇" onClick="protectsubmit(4)"></td>
          <td colspan=2 align=right><input type="button" name="cancel_all_btn" value="全部不選" onClick="protectsubmit(5)" disabled></td>
          <td align=center></td>
          <td align=center><input type="button" name="delete_btn" value="刪除" onClick="protectsubmit(3)" disabled></td>
          </TR>
          <TR height=30><td colspan=4>規則列表</td><TD colspan=6 align=right><div id="page_info" name="page_info"/></TR>
          <TR>
          <TD colspan=10><div id="rule_list" name="rule_list"/></TD>
          </TR>
          <TR height=5><td colspan=10></td></TR>
          </table>
          </td>
          </tr>
          <tr>
          </tr>
          </table>

          </BODY>
          </HTML>


          rule.xml
          ============
          <?xml version="1.0" encoding="GB2312"?>
          <?xml:stylesheet type="text/xsl" href="rule.xsl"?>
          <rules>
          <rule>
          <event>
          <id>10001</id>
          <name>TFTP下載文件</name>
          </event>
          <enable>false</enable>
          </rule>
          <rule>
          <event>
          <id>10002</id>
          <name>TFTP上傳文件</name>
          </event>
          <enable>false</enable>
          </rule>
          <rule>
          <event>
          <id>10003</id>
          <name>telnet登錄成功</name>
          </event>
          <enable>false</enable>
          </rule>

          </rules>

          rule.xsl
          =============
          <?xml version="1.0" encoding="GB2312"?>
          <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
          <xsl:strip-space elements="*"/>
          <xsl:output method= "html"/>
          <xsl:param name="ename">undefined</xsl:param>
          <xsl:param name="startno">undefined</xsl:param>
          <xsl:param name="endno">undefined</xsl:param>

          <xsl:template match="/">
          <html>
          <body>
          <xsl:apply-templates select="rules"/>
          </body>
          </html>
          </xsl:template>

          <xsl:template match="rules">
          <input type="hidden" name="total_item">
          <xsl:attribute name="value"><xsl:value-of select="count(rule[contains(event/name, $ename)])"/></xsl:attribute>
          </input>
          <TABLE id="viewTable" name="viewTable" width="100%" border="1" bordercolor="#85979f" cellSpacing="0" cellPadding="0" style="border-collapse:collapse;">
          <tr height="25">
          <TD width="10%" align="center">選擇</TD>
          <TD width="10%" align="center">狀態</TD>
          <TD width="10%" align="center">事件號</TD>
          <TD width="*" align="center">事件名</TD>
          </tr>

          <xsl:for-each select='rule[contains(event/name, $ename)]'>
          <xsl:sort select="event/id"/>
          <xsl:if test="position()> $startno and position()<= $endno">
          <tr>
          <td align="center">
          <input type='checkbox'>
          <xsl:attribute name="name">viewchk_<xsl:value-of select="event/id"/></xsl:attribute>
          <xsl:attribute name="value"><xsl:value-of select="event/id"/></xsl:attribute>
          <xsl:attribute name="onClick">checkOVItem(<xsl:value-of select="event/id"/>)</xsl:attribute>
          </input>
          </td>
          <xsl:choose>
          <xsl:when test="enable[. = 'true']">
          <td align="center">有效</td>
          </xsl:when>
          <xsl:otherwise>
          <td align="center">禁用</td>
          </xsl:otherwise>
          </xsl:choose>
          <td align="center"><xsl:value-of select="event/id"/></td>
          <td><xsl:value-of select="event/name"/></td>
          </tr>
          </xsl:if>
          </xsl:for-each>
          </TABLE>
          </xsl:template>

          </xsl:stylesheet>

          posted on 2007-12-29 15:44 feingto 閱讀(362) 評論(0)  編輯  收藏 所屬分類: Ajax、JAVASCRIPT

          主站蜘蛛池模板: 泰安市| 平凉市| 宝兴县| 五家渠市| 阿荣旗| 通化市| 德昌县| 乌鲁木齐县| 株洲市| 阿拉尔市| 甘德县| 澄城县| 大名县| 娱乐| 满洲里市| 家居| 武邑县| 林芝县| 翁牛特旗| 乌什县| 遵义县| 南宁市| 东山县| 桂林市| 原平市| 忻城县| 徐汇区| 拉孜县| 洞口县| 育儿| 招远市| 西充县| 盘山县| 修水县| 岳池县| 雷波县| 屏山县| 临湘市| 芦溪县| 大余县| 阳城县|