XSLT动态javascript'不'过滤

时间:2011-12-11 18:55:26

标签: javascript xslt

我有这个学校的作品要求制作一个地址簿并按字母顺序过滤。每当我尝试过滤我的时候,我最终会重新加载页面并显示所有名称,而不是过滤掉它。我最终发现每当我调用我的apply()函数时页面重新加载并且我不会做任何改变。它根本不是过滤器我对什么是错误感到茫然......任何人都有任何想法?继承了xslt的主要部分:我尝试改变几乎任何值来匹配在课堂上给我们的模板,但我不能让它工作。 (我没有触及的部分是apply和init函数(除了更改变量名称之外)

这里的大多数相关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();
    }

现在,每当我调用apply函数时,没有我在showByLetter函数中传递的XPATH值,页面最终重新加载并显示我在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>

1 个答案:

答案 0 :(得分:0)

我对你的apply()函数试图做什么一无所知 - 或者我错过了什么,或者你对处理模型的含义有一个非常奇怪的想法。

您需要使用xsl:param为样式表定义参数,并使用此参数的值来过滤地址。然后,您需要使用转换API从Javascript设置此参数的值。