如何在 XSLT 1.0 中执行代码表查找



如何从 XSLT 1.0 版中的代码表中查找? 我尝试做类似此示例的操作:https://www.xml.com/pub/a/2002/02/06/key-lookups.html,但我认为在这种情况下,数据在输入文件中,而不是在 XSLT 本身中。

我创建了一个名为"lookup"的命名空间并尝试了以下内容,其中我的查找表位于 XSLT 代码本身中,但我总是得到空值。 我是否需要将其移动到应用模板结构?

<lookup:TenderActionType>
<string id='00'>Add</string>
<string id='01'>Cancel</string>
<string id='04'>Update</string>
<string id='05'>Update</string>
<string id='56'>Cancel</string>
<string id='06'>Add</string>
<string id='46'>Cancel</string>
</lookup:TenderActionType>
<xsl:key name='tenderActionType' match='string' use='@id' />
<!-- I tried this as well --> 
<xsl:key name='tenderActionType2' match='lookup:TenderActionTypestring' use='@id' />

下面的代码适用于使用 Microsoft BizTalk 转换为 XML 的 EDI 文件。

<ChangeStatus>
<xsl:value-of select="key('tenderActionType', s0:B2A/B2A01/text())" />
</ChangeStatus>
<ChangeStatusTest>
<xsl:value-of select="key('tenderActionType', '04')"/>            
</ChangeStatusTest>

基于这篇文章,我让它工作。 还引用了帖子以正确传递参数。

当我使用Microsoft时,我不得不将exsl更改为msxsl。 我放弃了使用密钥的想法。

<xsl:variable name="LookupTenderActionType">
<string id='00'>Add</string>
<string id='01'>Cancel</string>
<string id='04'>Update</string>
<string id='05'>Update</string>
<string id='56'>Cancel</string>
<string id='06'>Add</string>
<string id='46'>Cancel</string>
</xsl:variable>
<xsl:variable name="lookupSet" select="msxsl:node-set($LookupTenderActionType)" />

我用文字和 XPATH 值进行测试,直到我知道我的 XPATH 是正确的:

<Process> 
<ChangeStatus>
<xsl:call-template name="PerformLookupTenderActionType">
<xsl:with-param name="lookupNumericCode" select="s0:B2A/B2A01/text()"/>
</xsl:call-template>              
</ChangeStatus>
<ChangeStatusTest>
<xsl:call-template name="PerformLookupTenderActionType">
<xsl:with-param name="lookupNumericCode" select="04"/>
</xsl:call-template>              
</ChangeStatusTest>

该模板充当查找子例程/函数:

<xsl:template name="PerformLookupTenderActionType">
<xsl:param name="lookupNumericCode"/>
<xsl:value-of select="$lookupSet/string[@id = $lookupNumericCode]"/>
</xsl:template>

在XML输出中得到了我想要的结果(将04的代码转换为"更新"(:

ChangeStatus>Update</ChangeStatus>

最新更新