2016-04-26 6 views
0

xsltテンプレートを実行しようとしていますが、関連する2つのパラメータが必要です。 XMLの主なアイデアは、クライアントと銀行とのリスト、この関連する2つのパラメータをテンプレートに送信する方法

<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

あなたがkey('banks', $client/bank-id)を行うことによって、銀行のノードにアクセスすることができ、あなたのprocess-clientsテンプレート内、次にid

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

bankノードを取得するためにキーを設定することができます。例えば、銀行名を表示するには、それは次のようになります。

<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> 
関連する問題