2013-12-09 60 views
0

尋找以下解決方案: 這是我的javascript函數,它將參數設置爲我的xsl文件,並且此參數包含具有xpath合成器的字符串查詢將param作爲xpath expressin傳遞給XSLT- javascript

queryFilter = "*/person[name='John']"; 

function getXSLDoc(xslDocument,xmlDocument,queryFilter) { 
.. 
    var processor = new XSLTProcessor(); 
    processor.setParameter(null,"name",queryFilter); 
.... 
} 

現在我的XSLT文件,我想借此queryFilter字符串,並以循環使用它,或者創建一個變量:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" 
       xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
       xmlns="http://www.w3.org/1999/xhtml"> 
    <xsl:output method="html" indent="yes"/> 

    <xsl:param name="queryFilter"/> 

<!-- Lets say I want to create a local variable and use it to loop on a node --> 

    <xsl:variable name="varFilter" select="$queryFilter"/> 

    <xsl:for-each select="$**varFilter**"> 
     <tr> 
      <xsl:apply-templates select="name"/> 
      .. 
     </tr> 
    </xsl:for-each> 

</xsl:stylesheet> 

現在我如何才能用我在我的JavaScript功能設置爲帕拉姆一個xpath表達式?

+1

這XSLT文件無效。沒有模板。我建議重寫你的XSLT。 – 2013-12-09 04:48:03

+0

你試過簡單地使用參數* as as *,即''? –

+0

我相信你所要做的是動態評估xpath,這在XSLT 1.0(或2.0)中是不受支持的,我想。你可以使用擴展函數來做到這一點。例如,查看http://www.exslt.org/dyn/index.html。 –

回答

1

沒有支持在運行時動態評估完整的XPath表達式。但是在很多情況下,只需傳入一個數字或字符串值,您可以在比較中使用

name = "John"; 

processor.setParameter(null,"name",name); 

然後在XSLT你有

<xsl:param name="name"/> 

<xsl:for-each select="*/person[name = $name]">...</xsl:for-each>