我有这个学校的作品要求制作一个地址簿并按字母顺序过滤。每当我尝试过滤我的时候,我最终会重新加载页面并显示所有名称,而不是过滤掉它。我最终发现每当我调用我的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 = "Test"]')">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 :(得分:0)
我对你的apply()函数试图做什么一无所知 - 或者我错过了什么,或者你对处理模型的含义有一个非常奇怪的想法。
您需要使用xsl:param为样式表定义参数,并使用此参数的值来过滤地址。然后,您需要使用转换API从Javascript设置此参数的值。