2016-04-26 11 views
0

Ich versuche, eine XSLT-Vorlage auszuführen, und ich brauche zwei verwandte Parameter. Die Hauptidee des xml ist eine Liste mit Kunden und Banken, so etwas wie diesesWie zwei verwandte Parameter zu einer Vorlage gesendet werden

<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> 

Also, was ich will, ist eine Vorlage rufen alle Clients zu verarbeiten, ich tue es auf diese Weise

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

Aber um den Banknamen anzuzeigen, brauche ich den Bankknoten zu meinem Kunden, und ich habe diese Bank nicht in der Vorlage "Prozess-Clients".

Wie kann ich den Banknamen innerhalb der Vorlage erhalten oder wie kann ich den Banknamen als Parameter an die Vorlage senden?

+0

„* An dieser Stelle möchte ich eine Vorlage rufen alle Clients zu verarbeiten *“ Was ist „dieser Punkt“? –

+0

In diesem Moment/was ich will, etc. – jusanco

+0

Meine Frage war nicht sprachlich. –

Antwort

0

Sie könnten einen Schlüssel zu erhalten, die bank Knoten durch id

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

Dann in Ihrer process-clients Vorlage einrichten, können Sie den Bankknoten key('banks', $client/bank-id), indem Sie zugreifen können. Um zum Beispiel den Namen der Bank angezeigt werden würde wie folgt aussehen:

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

Wenn Sie jedoch in der Bank Knoten als Parameter zu übergeben wollte, können Sie es so machen könnte ...

<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

Es hat funktioniert, vielen Dank !!! – jusanco

0

Wenn ich richtig rate, beginnen Sie mit der Verarbeitung der Banken, dann innerhalb jeder Bank, die Sie die Kunden dieser Bank verarbeiten möchten.

Wenn ja, sollten Sie so etwas tun:

<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> 
Verwandte Themen