2016-11-30 138 views
1

鑑於當處理:工藝節點停止到達某些節點XSLT 1.0 XPATH

<illustratedPartsCatalog> 
    <figure id="fig1">...</figure> 
    <catalogSeqNumber>...</catalogSeqNumber> 
    <catalogSeqNumber>...</catalogSeqNumber> 
    <catalogSeqNumber>...</catalogSeqNumber> 
    <catalogSeqNumber>...</catalogSeqNumber> 
    <catalogSeqNumber>...</catalogSeqNumber> 
    <figure id="fig2">...</figure> 
    <catalogSeqNumber>...</catalogSeqNumber> 
    <catalogSeqNumber>...</catalogSeqNumber> 
    <catalogSeqNumber>...</catalogSeqNumber> 
    <catalogSeqNumber>...</catalogSeqNumber> 
    <catalogSeqNumber>...</catalogSeqNumber> 
</illustratedPartsCatalog> 

每個圖得到它自己的<catalogSeqNumber>s表但現在的如圖一表還包括用於figure2條目,並且反之亦然。當它到達下一個圖時,<catalogSeqNumber>的處理應該停止。

解決了託默勒格的回答是:

<xsl:template match="illustratedPartsCatalog"> 
    <xsl:apply-templates /> 
</xsl:template> 

我已將此添加的<xsl:template match="figure">

<xsl:if test="following-sibling::*[1][self::catalogSeqNumber] and ancestor::illustratedPartsCatalog"> 
    <xsl:call-template name="PI-TABLE"/> 
</xsl:if> 

末,並將此向PI表(它建立的<catalogSeqNumber>表):

<xsl:apply-templates select="key('kCSN', @id)" /> 

回答

0

<xsl:key>可以幫助你。

<xsl:key name="kCSN" match="catalogSeqNumber" use="preceding-sibling::figure[1]/@id"> 

<xsl:template match="illustratedPartsCatalog"> 
    <xsl:apply-templates select="figure" /> 
</xsl:template> 

<xsl:template match="figure"> 
    <container> 
    <xsl:apply-templates select="key('kCSN', @id)" /> 
    </container> 
</xsl:template> 

<xsl:template match="catalogSeqNumber"> 
    <!-- catalogSeqNumber processing ... --> 
</xsl:template> 

這裏的關鍵指標由前述的<figure> immediateley的@id所有<catalogSeqNumber>元素。

現在,當我們只處理<figure>元素時,我們可以使用key()函數輕鬆提取關聯的<catalogSeqNumber>元素。

+0

輝煌,謝謝Tomalak。我在類似的問題中看到'',但我無法弄清楚如何修改它。 – Caroline

+0

我之前寫了一個關於xsl:key的解釋,也許它可以幫助您將頭圍繞在它周圍。 http://stackoverflow.com/questions/948218/xslt-3-level-grouping-on-attributes/955527#955527 – Tomalak

+0

Danke,Tomalak。 – Caroline