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

时间:2014-02-10 23:05:40

标签: xslt

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

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

<item>
<lineqty>     1</lineqty>
<linesku>BNLP5008       </linesku>
<linecustprod>xxxxxxxxxxxxxxx</linecustprod>
<linedesc>London Pride (Bot500mlx8)               </linedesc>
</item>

<item>
<lineqty>     1</lineqty>
<linesku>BNBL5008       </linesku>
<linecustprod>xxxxxxxxxxxxxxx</linecustprod>
<linedesc>Bengal Lancer (Bot500mlx8)              </linedesc>
</item>

我想使用linesku标记的值替换每个linecustprod标记中的xxxxxxxxxxxxxxx和查找表中的材料。

这是我的查询表:

<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会起作用,但是找不到一个可用的例子来制作婴儿床:)

此时我的沮丧情绪会再次得到您的指导:)

谢谢,

布赖恩。

2 个答案:

答案 0 :(得分:1)

将变量定义更改为

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

应该足够了,这会将linesku拉出到您当前正在查看的linecustprod的兄弟姐妹身上。如当前定义的那样,变量将包含文档中所有 linesku元素的节点集,因此value-of将为您提供$SkuList中的第一个条目匹配主输入文件中的任何条目。

答案 1 :(得分:0)

除了Ian Roberts的回答,请更改

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

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

由于某种原因,第一个引发错误(格式错误的URL)。