Xslt 用于切换产品代码的预处理脚本

Xslt 用于切换产品代码的预处理脚本,xslt,Xslt,我继承了一段代码,我试图让它在匹配模式的倍数上工作,并通过使用另一个标记从表中查找值来设置标记。发生的情况是,对于每个项目,执行相同的查找,而不是节点的相对查找。我无法计算出语法来处理所有条目并替换正确的条目。一定要简单,只是我更简单:) 我的源xml包含以下内容(未显示在外部/oomsdoc文档节点中): 1. BNLP5008 XXXXXXXXXXXXX 伦敦骄傲酒店(Bot500mlx8) 1. BNBL5008 XXXXXXXXXXXXX 孟加拉兰瑟(Bot500mlx8) 我想用查

我继承了一段代码,我试图让它在匹配模式的倍数上工作,并通过使用另一个标记从表中查找值来设置标记。发生的情况是,对于每个项目,执行相同的查找,而不是节点的相对查找。我无法计算出语法来处理所有条目并替换正确的条目。一定要简单,只是我更简单:)

我的源xml包含以下内容(未显示在外部/oomsdoc文档节点中):


1.
BNLP5008
XXXXXXXXXXXXX
伦敦骄傲酒店(Bot500mlx8)
1.
BNBL5008
XXXXXXXXXXXXX
孟加拉兰瑟(Bot500mlx8)
我想用查找表中使用linesku标记值的材料替换每个linecustprod标记中的XXXXXXXXXXXXX

这是我的查找表:

<Materials>
    <product sku='BNLP5008       ' material='LONDON PRIDE'/>
    <product sku='BNBL5008       ' material='BENGAL LANCER'/>
</Materials>

这是我的xslt代码

    <xsl:variable name="SkuList" select="document('d:\test\transforms\catalogue.xml')/Materials"/>

<xsl:template match="/oomsdoc/item/linecustprod">
    <xsl:variable name="MySku" select="/oomsdoc/item/linesku"/>
    <linecustprod>
        <xsl:value-of select="$SkuList/product[@sku=$MySku]/@material"/>
    </linecustprod>
</xsl:template>

我猜某种xsl foreach会起作用,但就是找不到一个可用的例子:)

在我沮丧的时候,再次感谢您的指导:)

谢谢


Brian.

将变量定义更改为

<xsl:variable name="MySku" select="../linesku"/>


应该足够了,这将拉出您当前正在查看的
linecustprod
的同级
linesku
。根据当前定义,变量将包含文档中所有
linesku
元素的节点集,因此
值将为您提供
$SkuList
中与主输入文件中的任何条目匹配的第一个条目。

除了Ian Roberts的答案,请更改

<xsl:variable name="SkuList" select="document('d:\test\transforms\catalogue.xml')/Materials"/>



出于某种原因,第一个会抛出一个错误(错误的URL)。

您的“查找”表是同一个XML文档的一部分,还是单独的文档?如果您演示如何在XSLT中定义$SkuList,可能会有所帮助。谢谢@TimC它就在那里,只是被一个格式问题隐藏了。好吧,这就解决了它-非常感谢。我已经在shell中使用了多年的点和点,但直到出现这个问题之前,我还没有意识到它在xslt中的重要性:)谢谢你的建议,但由于某种原因,对于使用它的自定义处理器,当前语法是有效的,当我“修复”它时,它就失败了。奇怪吧?
<xsl:variable name="SkuList" select="document('d:\test\transforms\catalogue.xml')/Materials"/>
<xsl:variable name="SkuList" select="document('/d:\test\transforms\catalogue.xml')/Materials"/>