XSLT динамическая фильтрация JavaScript «не» - PullRequest
0 голосов
/ 11 декабря 2011

У меня в этой школе работает просьба сделать адресную книгу и отфильтровать по алфавиту. всякий раз, когда я пытаюсь отфильтровать свою, я перезагружаю свою страницу и показываю все имена, а не фильтрую ее вообще. В итоге я обнаружил, что всякий раз, когда я вызываю функцию 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, не важно, что я передаю в качестве значения 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>

1 Ответ

0 голосов
/ 11 декабря 2011

Я не имею ни малейшего представления о том, что пытается сделать ваша функция apply () - либо я что-то упускаю, либо у вас очень странное представление о том, что такое модель обработки.

Вам необходимо определить параметр в вашей таблице стилей с помощью xsl: param и использовать значение этого параметра для фильтрации адресов. Затем вам нужно установить значение этого параметра из вашего Javascript с помощью API преобразования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...