2011-12-11 65 views
0

我有這個學校的作品要求提供一個地址簿和過濾器是按字母順序的。每當我嘗試過濾我的內容時,我都會重新加載頁面並顯示所有名稱,而不是根據它進行過濾。我最終發現,每當我打電話給我的apply()函數頁面重新加載,並不會做任何更改,我只是做。它根本不是過濾器我對輸入錯誤感到茫然......任何人有任何想法?繼承人xslt的主要部分:我嘗試改變幾乎任何價值,以匹配在課堂上給我們的模板,但我不能讓它工作。 (我還沒有接觸的部分是應用和初始化函數(當然除了改變變量名)XSLT動態javascript'不'過濾

大多數在這裏相關XSLT搜索的最終集中在XPATH而不是JS部分...

// <![CDATA[ 

    function initFF(){ 
     xmlDoc = document.implementation.createDocument("","",null); 
     xslDoc = document.implementation.createDocument("","",null); 

     xmlDoc.load(" CarnetAdresse.xml"); 
     xslDoc.load("CarnetAdresse.xslt"); 

     xslDoc.addEventListener("load", initPointeurFF, false); 
    } 

    function nameSpaceResolver(prefix){ 
     return "http://www.w3.org/1999/XSL/Transform"; 
    } 
    function initPointeurFF(){ 

     noeudFiltre = xslDoc.evaluate("//xsl:apply-templates[@select='individu']/@select", 
                xslDoc, 
                nameSpaceResolver, 
                XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; 
     objProcessor = new XSLTProcessor(); 
     objProcessor.importStylesheet(xslDoc); 

    } 

    function apply(){ 

      tempDoc = document.implementation.createDocument("","",null); 

      frag = objProcessor.transformToFragment(xmlDoc.documentElement, tempDoc); 

      document.getElementById("main").innerHTML=""; 
      document.getElementById("main").appendChild(frag); 

    } 


    function showByLetter(val){ 

     noeudFiltre.value = val; 

     apply(); 
    } 

現在,每當我調用應用功能,無馬瑟我傳遞的XPATH值在我showByLetter功能的頁面最終重新加載和顯示我的所有不會忽略我在我的xml。

這裏是我的模板,如果需要;

<body onload="initialiser()"> 
    <table> 
    <tr> 
    <td onclick="showByLetter('individu[nom = &quot;Test&quot;]')">test</td>> 
    </tr> 
    </table> 
    <div id="main"> 
     <table cellspacing="0" cellpadding="0" class="main-table"> 
      <xsl:apply-templates select="individu"> 
       <xsl:sort select="nom" order="ascending"/> 
      </xsl:apply-templates> 
     </table> 
    </div> 

<xsl:template match="individu"> 
<xsl:for-each select="./*"> 
     <tr> 
     <td class="table-name"><xsl:value-of select="name(.)" /></td> 
     <td class="table-content"><xsl:value-of select="." /></td> 
     </tr> 
    </xsl:for-each> 
</xsl:template> 

回答

0

我不知道你的apply()函數試圖做什麼 - 要麼我錯過了某些東西,要麼你對處理模型有什麼奇怪的想法。

您需要使用xsl:param爲樣式表定義一個參數,並使用此參數的值來過濾地址。然後,您需要使用轉換API從Javascript中爲此參數設置一個值。

+0

可悲的是,我不是100%肯定要麼因爲我錯過了教授展示它的那一天...... 我不知道這個轉換API是什麼,而且這個應用函數像我們必須做的功課一樣起作用,我只是不知道爲什麼我不能讓它在這裏工作。從技術上講,它假設清空頁面(innerHTML =「」)比appendchild想要獲得解析緩衝區並顯示結果...但正如我所說我錯過了那個類,所以我不知道背後的機制 –