如果有人能发现任何改进/建议,我希望稍微优化一下这个 XSLT?
我收到一个遵循这种格式的 XML 文件:
<TransfersToComplete>
<TransfersForFees>
<Transfer>
<PlayerID>1234</PlayerID>
<ClubJoiningID>4444</ClubJoiningID>
<FeeInPounds>1200000</FeeInPounds>
</Transfer>
<Transfer>
<PlayerID>3835</PlayerID>
<ClubJoiningID>4444</ClubJoiningID>
<FeeInPounds>5000000</FeeInPounds>
</Transfer>
<Transfer>
<PlayerID>17118</PlayerID>
<ClubJoiningID>5229</ClubJoiningID>
<FeeInPounds>18000000</FeeInPounds>
</Transfer>
</TransfersForFees>
<FreeAgencyTransfers>
<FreeTransfer>
<PlayerID>42323</PlayerID>
<ClubJoiningID>332</ClubJoiningID>
</FreeTransfer>
</FreeAgencyTransfers>
</TransfersToComplete>
我还有另一个 XML 文件,其中包含“活动”俱乐部的列表(即由球员而不是 AI 控制的俱乐部)
<ActiveClubs>
<Club><ClubID>1234</ClubID></Club>
<Club><ClubID>4482</ClubID></Club>
</ActiveClubs>
作为 Biztalk 解决方案的一部分,我已将它们加入到双输入映射中,因此输入文档看起来像这样:
<Root>
<InputMessage0>
<ActiveClubs>
<Club>
<ClubID>1234</ClubID>
</Club>
<Club>
<ClubID>4482</ClubID>
</Club>
</ActiveClubs>
</InputMessage0>
<InputMessage1>
<TransfersToComplete>
<TransfersForFees>
<Transfer>
<PlayerID>1234</PlayerID>
<ClubJoiningID>4444</ClubJoiningID>
<FeeInPounds>1200000</FeeInPounds>
</Transfer>
<Transfer>
<PlayerID>3835</PlayerID>
<ClubJoiningID>4444</ClubJoiningID>
<FeeInPounds>5000000</FeeInPounds>
</Transfer>
<Transfer>
<PlayerID>17118</PlayerID>
<ClubJoiningID>5229</ClubJoiningID>
<FeeInPounds>18000000</FeeInPounds>
</Transfer>
</TransfersForFees>
<FreeAgencyTransfers>
<FreeTransfer>
<PlayerID>42323</PlayerID>
<ClubJoiningID>332</ClubJoiningID>
</FreeTransfer>
</FreeAgencyTransfers>
</TransfersToComplete>
</InputMessage1>
</Root>
我不希望游戏中的每个玩家都能看到每次转会的完整运作,所以我只限制在他们自己的俱乐部,我的 XSLT 如下:
<xsl:for-each select="/*[1]/ActiveClubs/Club">
<xsl:variable name ="clubId" select="current()/ClubID/text()"/>
<...CallTemplate...>
</xsl:for-each>
有没有办法可以优化每个,它有什么帮助?随着活跃俱乐部数量的增加,我看到我的 CPU 慢慢被占用,所以我认为这是部分原因?
编辑:
预期输出将是变量 ClubId 第一次是 1234,第二次是 4482
在我上面的例子(2个活跃的俱乐部)中,我看到很少/没有性能下降——当我达到 40 岁及以上时......
就显示 XSLT 的其余部分而言 - 这是它调用的模板:
<xsl:call-template name="DoPaidTransfers">
<xsl:with-param name="var:ClubId" select="$clubId"/>
</xsl:call-template>
这是:
<xsl:template name="DoPaidTransfers">
<xsl:param name="var:ClubId"/>
<responseCode><xsl:value-of select="CSharpCodeCall:DoPaidTransfers($clubId)"/></responseCode>
</xsl:template>
我的 C# 代码将它们写入数据库,返回成功代码,并通过环境传递到其他地方。正如我所说,它按预期工作,但是当增加活跃的俱乐部数量时,我发现性能会显着下降。