2014-02-10 22 views
1

我有一段代碼,我已經繼承,我試圖讓它在匹配模式的倍數上工作,並設置一個標記從表中查找值另一個標籤。會發生的是,對於每個項目,執行相同的查找,而不是節點的相對查找。我無法制定通過所有條目工作的語法並替換正確的條目。這一定是簡單,它只是我簡單:)預處理腳本切換產品代碼

我的源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> 

我想替代XXXXXXXXXXXXXXX每個linecustprod使用linesku標記的值使用查找表中的材料標記標記。

這是我的查找表:

<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

您的「查找」表是同一個XML文檔或單獨文檔的一部分嗎?如果你展示瞭如何在你的XSLT中定義** $ SkuList **,這可能會有所幫助。謝謝! –

+0

@TimC它在那裏,只是由格式問題隱藏。 –

回答

1

改變變量定義

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

應該是足夠的,這將拉出linesku這是一個兄弟給你linecustprod目前正在觀察。作爲目前定義的變量將包含節點集的所有文檔中的linesku元素,所以value-of會給你從$SkuList匹配主輸入文件中的任何條目的第一項。

+0

那麼整理它 - 非常感謝。我已經在shell中使用了點和點,但是在xslt中沒有意識到這一點很重要:) – Brian

0

除了伊恩·羅伯茨的回答,請及時更換

<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)。

+0

感謝您的建議,但由於某些原因,使用了定製處理器,目前的語法工作,當我「修復」它失敗。奇怪,呃? – Brian