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