我正在尝试执行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)
您可以设置密钥以bank
id
节点
<xsl:key name="banks" match="bank" use="id" />
然后,在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>
答案 1 :(得分: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>