乖,別哭的薄殼
          ~一份耕耘,一份收獲~
          posts - 23,comments - 260,trackbacks - 0
          前幾天公司要用xml快速方便的存取屬性N多的數(shù)據(jù),跟sinoly合作研究了一下.做了一個(gè)小例子.

          1.example.xml--主要數(shù)據(jù)文件

          <?xml version="1.0" encoding="UTF-8"?>

          <?xml:stylesheet type="text/xsl" href="example.xsl"?>

          <projects id="1">
              
          <project title="一級(jí)標(biāo)題1" index="1">
                  
          <items isTrunk="false" title="二級(jí)標(biāo)題1.1" id="items_1">
                      
          <result type="2">1</result>
                      
          <officer><![CDATA[]]></officer>
                      
          <classified>1</classified>
                      
          <eligibility>0</eligibility>
                      
          <remark></remark>
                  
          </items>
                  
          <items isTrunk="false" title="二級(jí)標(biāo)題1.2" id="items_2">
                      
          <result type="2">3</result>
                      
          <officer><![CDATA[]]></officer>
                      
          <classified>1</classified>
                      
          <eligibility>0</eligibility>
                  
          </items>
              
          </project>
              
          <project title="一級(jí)標(biāo)題2" index="2">
                  
          <items isTrunk="false" title="二級(jí)標(biāo)題2.1" id="items_3">
                      
          <result type="3">3</result>
                      
          <officer><![CDATA[]]></officer>
                      
          <classified>1</classified>
                      
          <eligibility>0</eligibility>
                  
          </items>
                  
          <items isTrunk="true" title="二級(jí)標(biāo)題2.2">
                      
          <item title="三級(jí)標(biāo)題2.2.1" id="item_1">
                          
          <result type="1">2</result>
                          
          <officer><![CDATA[居然是亂碼]]></officer>
                          
          <classified>1</classified>
                          
          <eligibility>0</eligibility>
                      
          </item>
                      
          <item title="三級(jí)標(biāo)題2.2.2" id="item_2">
                          
          <result type="1">3</result>
                          
          <officer><![CDATA[<><>]]></officer>
                          
          <classified>1</classified>
                          
          <eligibility>0</eligibility>
                      
          </item>
                  
          </items>            
                  
          <items isTrunk="true" title="二級(jí)標(biāo)題2.3">
                      
          <item title="三級(jí)標(biāo)題2.3.1" id="item_3">
                          
          <result type="2">1</result>
                          
          <officer><![CDATA[]]></officer>
                          
          <classified>1</classified>
                          
          <eligibility>0</eligibility>
                      
          </item>
                      
          <item title="三級(jí)標(biāo)題2.3.2" id="item_4">
                          
          <result type="2">1</result>
                          
          <officer><![CDATA[]]></officer>
                          
          <classified>1</classified>
                          
          <eligibility>0</eligibility>
                      
          </item>
                  
          </items>            
              
          </project>
              
          <project title="一級(jí)標(biāo)題3" index="3">
                  
          <items isTrunk="false" title="二級(jí)標(biāo)題3.1" id="items_4">
                      
          <result type="4" units="元">25345</result>
                      
          <officer><![CDATA[sinoly]]></officer>
                      
          <classified>1</classified>
                      
          <eligibility>0</eligibility>
                  
          </items>
                  
          <items isTrunk="false" title="二級(jí)標(biāo)題3.2" id="items_5">
                      
          <result type="4" units="元">9865764</result>
                      
          <officer><![CDATA[]]></officer>
                      
          <classified>1</classified>
                      
          <eligibility>0</eligibility>
                  
          </items>
                  
          <items isTrunk="false" title="二級(jí)標(biāo)題3.3" id="items_6">
                      
          <result type="2">0</result>
                      
          <officer><![CDATA[]]></officer>
                      
          <classified>1</classified>
                      
          <eligibility>0</eligibility>
                  
          </items>
                  
          <items isTrunk="true" title="二級(jí)標(biāo)題3.4">
                      
          <item title="三級(jí)標(biāo)題3.4.1" id="item_5">
                          
          <result type="1">0</result>
                          
          <officer><![CDATA[]]></officer>
                          
          <classified>1</classified>
                          
          <eligibility>0</eligibility>
                      
          </item>
                      
          <item title="三級(jí)標(biāo)題3.4.2" id="item_6">
                          
          <result type="1">0</result>
                          
          <officer><![CDATA[]]></officer>
                          
          <classified>1</classified>
                          
          <eligibility>0</eligibility>
                      
          </item>
                      
          <item title="三級(jí)標(biāo)題3.4.3" id="item_7">
                          
          <result type="1">0</result>
                          
          <officer><![CDATA[]]></officer>
                          
          <classified>1</classified>
                          
          <eligibility>0</eligibility>
                      
          </item>
                  
          </items>
              
          </project>
          </projects>

          2.example.xsl--樣式文件,很方便的取到xml數(shù)據(jù)

          <?xml version="1.0" encoding="gb2312"?>

          <xsl:stylesheet version="1.0"   xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

              
          <!--根模板-->    
              
          <xsl:output method="xml"/>

              
          <xsl:template match="/">    
                  
          <xsl:apply-templates select="projects/project"/>
                  
          <h6>
                      
          <button type="submit" class="btn1_mouseout" onmouseover="this.className='btn1_mouseover'" onmouseout="this.className='btn1_mouseout'" title="提交"> 下一步</button>
                  
          </h6>
              
          </xsl:template>
              
              
          <!--主題模板-->
              
          <xsl:template match="project">
                  
          <TABLE border="0" cellspacing="0" cellpadding="0" class="table">
                      
          <tr>
                          
          <td colspan="5" align="center" class="tright">
                              
          <h2>
                                  
          <xsl:number value="position()" format="一、"/><xsl:value-of select="@title"/>
                              
          </h2>
                          
          </td>
                      
          </tr>
                      
          <xsl:apply-templates select="items"/>
                  
          </TABLE>
                  
          <BR/>
              
          </xsl:template>
              
              
          <!--一級(jí)題干模板-->
              
          <xsl:template match="items">
                  
          <tr>
                      
          <td colspan="2" class="tright">
                          
          <xsl:number value="position()" format="1."/><xsl:value-of select="@title"/>
                      
          </td>
                      
          <xsl:choose>
                          
          <xsl:when test="@isTrunk[.='false']">
                              
          <xsl:apply-templates select="result"/>
                              
          <xsl:apply-templates select="officer"/>
                          
          </xsl:when>
                          
          <xsl:otherwise>
                              
          <td colspan="3" class="tright" style="color:blue;font-weight:bolder">
                                  注意以下幾點(diǎn)
                              
          </td>
                              
          <xsl:apply-templates select="item"/>
                          
          </xsl:otherwise>
                      
          </xsl:choose>
                  
          </tr>
              
          </xsl:template>
              
                  
          <!--二級(jí)題干模板-->
              
          <xsl:template match="item">

                
          <tr>
                  
          <td class="tright" style="padding-left:20px" colspan="2">
                      
          <h4><xsl:number value="position()" format="(a)."/><xsl:value-of select="@title"/></h4>
                  
          </td>
                      
          <xsl:apply-templates select="result"/>
                      
          <xsl:apply-templates select="officer"/>
                
          </tr>
              
          </xsl:template>
              
              
          <!--選擇框模板-->
              
          <xsl:template match="result">
                              
          <xsl:choose>
                                  
          <xsl:when test="@type = '1'">
                                      
          <td width="15%">
                                      
          <xsl:element name="select">
                                          
          <xsl:attribute name="name">re_<xsl:value-of select="../@id"/></xsl:attribute>
                                          
          <!--<select name="select">-->
                                              
          <xsl:choose>
                                                  
          <xsl:when test=".='0'">
                                                      
          <option value="0" selected="selected">請(qǐng)選擇 </option>
                                                      
          <option value="1">符合</option>
                                                      
          <option value="2">基本符合</option>
                                                      
          <option value="3">不符合</option>
                                                  
          </xsl:when>
                                                  
          <xsl:when test=".='1'">
                                                      
          <option value="0">請(qǐng)選擇 </option>
                                                      
          <option value="1" selected="selected">符合</option>
                                                      
          <option value="2">基本符合</option>
                                                      
          <option value="3">不符合</option>
                                                  
          </xsl:when>
                                                  
          <xsl:when test=".='2'">
                                                      
          <option value="0">請(qǐng)選擇 </option>
                                                      
          <option value="1">符合</option>
                                                      
          <option value="2" selected="selected">基本符合</option>
                                                      
          <option value="3">不符合</option>
                                                  
          </xsl:when>
                                                  
          <xsl:when test=".='3'">
                                                      
          <option value="0">請(qǐng)選擇 </option>
                                                      
          <option value="1">符合</option>
                                                      
          <option value="2">基本符合</option>
                                                      
          <option value="3" selected="selected">不符合</option>
                                                  
          </xsl:when>                                        
                                              
          </xsl:choose>
                                              
          <!--</select>-->
                                          
          </xsl:element>
                                      
          </td>
                                  
          </xsl:when>
                                  
          <xsl:when test="@type = '2'">
                                      
          <td width="15%">
                                          
          <xsl:element name="select">
                                          
          <xsl:attribute name="name">re_<xsl:value-of select="../@id"/></xsl:attribute>
                                              
          <xsl:choose>
                                                  
          <xsl:when test=".='0'">
                                                      
          <option value="0" selected="selected">請(qǐng)選擇 </option>
                                                      
          <option value="1"></option>
                                                      
          <option value="2"></option>
                                                  
          </xsl:when>
                                                  
          <xsl:when test=".='1'">
                                                      
          <option value="0">請(qǐng)選擇 </option>
                                                      
          <option value="1" selected="selected"></option>
                                                      
          <option value="2"></option>
                                                  
          </xsl:when>
                                                  
          <xsl:when test=".='3'">
                                                      
          <option value="0">請(qǐng)選擇 </option>
                                                      
          <option value="1"></option>
                                                      
          <option value="2" selected="selected"></option>
                                                  
          </xsl:when>                        
                                              
          </xsl:choose>
                                          
          </xsl:element>
                                      
          </td>
                                  
          </xsl:when>
                                  
          <xsl:when test="@type = '3'">
                                      
          <td width="15%">
                                          
          <xsl:element name="select">
                                          
          <xsl:attribute name="name">re_<xsl:value-of select="../@id"/></xsl:attribute>
                                              
          <xsl:choose>
                                                  
          <xsl:when test=".='0'">
                                                      
          <option value="0" selected="selected">請(qǐng)選擇 </option>
                                                      
          <option value="1"></option>
                                                      
          <option value="2"></option>
                                                  
          </xsl:when>
                                                  
          <xsl:when test=".='1'">
                                                      
          <option value="0">請(qǐng)選擇 </option>
                                                      
          <option value="1" selected="selected"></option>
                                                      
          <option value="2"></option>
                                                  
          </xsl:when>
                                                  
          <xsl:when test=".='3'">
                                                      
          <option value="0">請(qǐng)選擇 </option>
                                                      
          <option value="1"></option>
                                                      
          <option value="2" selected="selected"></option>
                                                  
          </xsl:when>                        
                                              
          </xsl:choose>
                                          
          </xsl:element>
                                      
          </td>
                                  
          </xsl:when>

                                  
          <xsl:otherwise>
                                      
          <td width="15%">
                                      
          <xsl:element name="textarea">
                                          
          <xsl:attribute name="name">re_<xsl:value-of select="../@id"/></xsl:attribute><xsl:value-of select="."/>
                                      
          </xsl:element>
                                          
          <xsl:value-of select="@units"/>
                                      
          </td>
                                  
          </xsl:otherwise>
                              
          </xsl:choose>

              
          </xsl:template>
              
                  
          <!--責(zé)任人模板-->
              
          <xsl:template match="officer">
                  
          <td width="9%" class="tright">責(zé)任人</td>
                  
          <td width="11%">
                  
          <xsl:element name="textarea">
                      
          <xsl:attribute name="name">of_<xsl:value-of select="../@id"/></xsl:attribute>
                      
          <xsl:value-of select="."/>
                  
          </xsl:element>
                  
          </td>
              
          </xsl:template>
              
          </xsl:stylesheet>

          3.index.html--用javascript導(dǎo)入數(shù)據(jù)并能修改xml里的數(shù)據(jù).

          <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
          <html xmlns="http://www.w3.org/1999/xhtml">
          <head>
          <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
          <title>測(cè)試</title>
          </head>
          <link rel="Stylesheet" type="text/css" href="focusform.css"/>
          <script language="javascript" src="form.js"></script>
          <script type="text/javascript" src="detect.js"></script>
          <script type="text/javascript" src="xmldom.js"></script>
          <script type="text/javascript">
          //載入xml與xsl文件
              var oxml = new XmlDom();
              
          var oxsl = new XmlDom();
              oxml.async 
          = false;//同步載入
              oxsl.async = false;
              oxml.load(
          "example.xml");
              oxsl.load(
          "example.xsl");
              
          if (oxml.parseError != 0{
                  
          var oError = oxml.parseError;         
                  alert(
          "An error occurred:\nError Code: "
                        
          + oError.errorCode + "\n"
                        
          + "Line: " + oError.line + "\n"
                        
          + "Line Pos: " + oError.linepos + "\n"
                        
          + "Reason: " + oError.reason);
              }

              
          if (oxsl.parseError != 0{
                  
          var oError = oxsl.parseError;         
                  alert(
          "An error occurred:\nError Code: "
                        
          + oError.errorCode + "\n"
                        
          + "Line: " + oError.line + "\n"
                        
          + "Line Pos: " + oError.linepos + "\n"
                        
          + "Reason: " + oError.reason);
              }

              
          var sResult = oxml.transformNode(oxsl);
              
          //alert(sResult);
          //
          一些操作
          function btnSub(){
              
          var fes = document.forms[0].elements;
              
          for(var i = 0;i<fes.length;i++){
                  
          var name = fes[i].name;
                  
          if(name.indexOf('re_')!=-1){
                      
          var xmlid=name.substring(3,name.length);
                      
          var obj;// =  oxml.getElementById("items_1");//xml的dom里沒有這個(gè)方法?
                      var oItems1 = oxml.getElementsByTagName("items");//也可以用xpath實(shí)現(xiàn)。
                      var oItems2 = oxml.getElementsByTagName("item");
                      
          for(var j=0;j<oItems1.length;j++){
                          
          if(oItems1[j].getAttribute('id')==xmlid){
                              obj 
          = oItems1[j];
                              
          break;
                          }

                      }

                      
          for(var j=0;j<oItems2.length;j++){
                          
          if(oItems2[j].getAttribute('id')==xmlid){
                              obj 
          = oItems2[j];
                              
          break;
                          }

                      }

                      
          if(obj){
                          obj.childNodes[
          0].text = fes[i].value;
                      }
          else{
                          alert(
          "在xml中未找到id為"+xmlid+"的items或item");
                      }

                  }

                  
          if(name.indexOf('of_')!=-1){
                      
          var xmlid=name.substring(3,name.length);
                      
          var oItems1 = oxml.getElementsByTagName("items");
                      
          var oItems2 = oxml.getElementsByTagName("item");
                      
          for(var j=0;j<oItems1.length;j++){
                          
          if(oItems1[j].getAttribute('id')==xmlid){
                              obj 
          = oItems1[j];
                              
          break;
                          }

                      }

                      
          for(var j=0;j<oItems2.length;j++){
                          
          if(oItems2[j].getAttribute('id')==xmlid){
                              obj 
          = oItems2[j];
                              
          break;
                          }

                      }

                      
          if(obj){
                          obj.childNodes[
          1].text = fes[i].value;
                      }
          else{
                          alert(
          "在xml中未找到id為"+xmlid+"的items或item");
                      }
                  
                  }

              }

              alert(oxml.xml);
              
          //alert(oxml.childNodes[2].xml);
              return false;
          }

              
          </script>
          </head>

          <body>
          <form name="form1" action="test.jsp" method="post" onsubmit="return btnSub();">
          <script type="text/javascript">
              document.write(sResult);
          </script>
          </form>
          </body>
          </html>

          需要用到的輔助文件
          4.focusform.css--樣式文件
          5.form.js文本框的效果
          6.detect.js--瀏覽器及操作系統(tǒng)識(shí)別(取自javascript高級(jí)程序設(shè)計(jì))
          7.xmldom.js--不同瀏覽器xml操作統(tǒng)一(取自javascript高級(jí)程序設(shè)計(jì))

          下載地址
          posted on 2007-07-07 00:12 小祝 閱讀(4588) 評(píng)論(7)  編輯  收藏 所屬分類: Javascript

          FeedBack:
          # re: xml+xsl+javascript取值及修改數(shù)據(jù)
          2007-07-08 11:14 | sinoly
          汗一個(gè)。呵呵。。。
          是不是可以找你要點(diǎn)費(fèi)用?貌似有部分我的代碼哦:)
          ps:北漂對(duì)你們是一種歷練,有需要的時(shí)候給我電話就好。我想,北京怎么我還能活動(dòng)一下的  回復(fù)  更多評(píng)論
            
          # re: xml+xsl+javascript取值及修改數(shù)據(jù)
          2007-07-08 15:43 | 小祝
          @sinoly
          呵呵,我又不是拿來商業(yè)目的,開源的。。。給你留個(gè)名好了,呵呵~
          先謝謝了,我還是先找找看了,不行再找你幫忙,呵呵~  回復(fù)  更多評(píng)論
            
          # re: xml+xsl+javascript取值及修改數(shù)據(jù)
          2007-07-08 16:40 | 飄搖
          看見代碼就頭疼  回復(fù)  更多評(píng)論
            
          # re: xml+xsl+javascript取值及修改數(shù)據(jù)
          2007-07-10 10:48 | sinoly
          @小祝
          呵呵,我開個(gè)玩笑咯。。。
          不過經(jīng)過這一次的處理,堅(jiān)定了我以后在項(xiàng)目中使用統(tǒng)一xml處理方式的想法了。以前最為頭痛的統(tǒng)計(jì)對(duì)服務(wù)器的負(fù)載問題現(xiàn)在轉(zhuǎn)移到了客戶端,而服務(wù)器僅僅只進(jìn)行數(shù)據(jù)規(guī)整,感覺應(yīng)該是處理之道吧  回復(fù)  更多評(píng)論
            
          # re: xml+xsl+javascript取值及修改數(shù)據(jù)
          2009-03-28 16:18 | sdjl

          下載不了  回復(fù)  更多評(píng)論
            
          # re: xml+xsl+javascript取值及修改數(shù)據(jù)
          2009-03-31 08:58 | 小祝
          @sdjl
          不好意思,blogjava把這個(gè)文件弄丟失了,我這也沒備份了,
          detect.js 和 xmldom.js 在我的博文 《javascript學(xué)習(xí)筆記(六)--資料》里有,另外兩個(gè)其實(shí)無關(guān)緊要,有沒有都無所謂,只是樣子難看了點(diǎn)~~~  回復(fù)  更多評(píng)論
            
          # re: xml+xsl+javascript取值及修改數(shù)據(jù)
          2010-05-14 12:54 | 在線建模
          恩,先看看能不能用,呵呵  回復(fù)  更多評(píng)論
            
          主站蜘蛛池模板: 高雄市| 德令哈市| 工布江达县| 贺兰县| 涡阳县| 博爱县| 闽清县| 五华县| 石狮市| 民丰县| 南丰县| 武胜县| 凌源市| 于都县| 特克斯县| 阳信县| 信宜市| 宣恩县| 华宁县| 临夏市| 西华县| 南江县| 兴文县| 当雄县| 景洪市| 济源市| 赞皇县| 庆阳市| 普安县| 宿州市| 酒泉市| 钟祥市| 铁岭县| 白河县| 涡阳县| 合川市| 新巴尔虎右旗| 长武县| 平定县| 三门县| 威远县|