2016-04-26 48 views
0

我想執行一個xslt模板,我需要兩個相關的參數。的XML的主要思想是與客戶和銀行的名單,像這樣如何發送兩個相關的參數到模板

<client> 
    <id>lkjhg09876</q1:id> 
    <name> name-value </name> 
    <address> director-value </address> 
    <bank-id> qwerty12345 <bank-id> 
</client> 

<bank> 
    <id> qwerty12345 </id> 
    <name> bank-name-value </name> 
</bank> 

所以,我想是調用模板來處理所有的客戶,我做它這樣

<xsl:call-template name="process-clients"> 
    <xsl:with-param name="client" 
        select="./client"/> 
</xsl:call-template> 

但是,爲了顯示銀行名稱,我需要與我的客戶有關的銀行節點,並且我沒有將該銀行放在模板「process-clients」中。

如何獲取模板內的銀行名稱或如何將銀行名稱作爲參數發送到模板?

+0

「*在這一點上,我想打電話給一個模板來處理所有的客戶端*」是什麼「這一點」? –

+0

在這個時候/我想要什麼等 – jusanco

+0

我的問題不是語言。 –

回答

0

你可以建立一個關鍵的id

<xsl:key name="banks" match="bank" use="id" /> 

得到bank節點之後,您process-clients模板中,你可以通過做key('banks', $client/bank-id)訪問銀行節點。例如,顯示銀行名稱就應該是這樣的:

<xsl:value-of select="key('banks', $client/bank-id)/name" /> 

如果你確實想在銀行節點作爲參數來傳遞,雖然,你可以做這樣的......

<xsl:call-template name="process-clients"> 
    <xsl:with-param name="client" select="client"/> 
    <xsl:with-param name="bank" select="key('banks', client/bank-id)"/> 
</xsl:call-template> 
+0

它的工作,非常感謝! – jusanco

0

如果我正確地猜測,你首先處理銀行,然後在你想要處理該銀行客戶的每個銀行內。

如果是這樣,你應該這樣做:

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

<xsl:key name="client-by-bank" match="client" use="bank-id" /> 

<xsl:template match="/root"> 
    <root-wrapper> 
     <xsl:apply-templates select="bank"/> 
    </root-wrapper> 
</xsl:template> 

<xsl:template match="bank"> 
    <bank-wrapper> 
     <!-- some bank details here --> 
     <xsl:apply-templates select="key('client-by-bank', id)"> 
      <xsl:with-param name="bank-name" select="name"/> 
     </xsl:apply-templates> 
    </bank-wrapper> 
</xsl:template> 

<xsl:template match="client"> 
    <xsl:param name="bank-name" /> 
    <client-wrapper> 
     <!-- client details here --> 
     <!-- example of using bank name: --> 
     <xsl:value-of select="$bank-name"/> 
    </client-wrapper> 
</xsl:template> 

</xsl:stylesheet>