我有一段我继承的代码片段,我试图让它在匹配模式的倍数上工作,并设置一个标签,从使用另一个标签查找表中的值。会发生的是,对于每个项目,执行相同的查找而不是节点的相对查找。我无法通过所有条目来确定语法,并替换正确的语法。它必须简单,只是我更简单:)
我的源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会起作用,但是找不到一个可用的例子来制作婴儿床:)
此时我的沮丧情绪会再次得到您的指导:)
谢谢,
布赖恩。
答案 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)。