2012-07-31 38 views
-2

我正在使用xslt 2.0將一個xml文件轉換爲另一個xml文件。在XSLT 2.0中,我創建了一個接受一個參數的函數。實際上,參數是一個<w:p>元素的集合。因此,在函數中我使用<xsl:for-each-group>以獲得每個<w:p>並逐一處理。假設,下面提到的XML文件包含一個<w:p>元素之間的元素。因此,現在我想在<xsl:for-each-group>塊中處理每個<w:p>元素之後在函數中檢查following-sibling::w:table如何在xslt 2.0中獲取當前處理元素的下一個緊接的下一個兄弟節點?

XML文件

<w:document> 
     <w:p> para0</w:p> 
     <w:p> para1</w:p> 
     <w:table>table</w:table> 
     <w:p>para3</w:p> 
</w:document> 

XSLT片段:

<xsl:for-each-group select="$paragraphs" group-starting-with="w:p">   
       <xsl:apply-templates select="current-group()"> <!-- for processing <w:p>elements --> 
       </xsl:apply-templates>   

       <xsl:if test="following-sibling::w:table"> <!--check following-sibling of current <w:p> is <w:table> --> 
         <xsl:apply-templates select="following-sibling::w:table"> </xsl:apply-templates> 
        </xsl:if>  
    </xsl:for-each-group>  

following-sibling::w:table檢查調用時的第一要素processed.I將調用只有當第二個要素是processed.So,我想只檢查當前處理元素的下一個立即following-sibling是否在那個地方...

所以,請指導我擺脫這個問題...

+0

請顯示您的示例輸入的一些預期輸出。 $段落序列是否可以包含p和table以外的其他節點?還是它被稱爲p和表? – 2012-07-31 07:09:15

+0

我的$段落只包含p。但xml文件也包含很多其他節點 – Saravanan 2012-07-31 08:10:51

回答

0

在xsl:for-each-group中,上下文項是當前組中的第一個項目。所以跟隨兄弟會選擇相對於組中的第一個項目。如果你想選擇相對於第二項,使用current-group()[2]/following-sibling :: x。 (你也許只想要第一個下一個兄弟姐妹,這將是下面的兄弟姐妹:: x [1])。

但是接下來你會談談你自己發明的術語「當前處理元素」。你想處理組中每個項目的以下兄弟姐妹嗎?在這種情況下,我希望在xsl:for-each-group中看到一個xsl:for-each select =「current-group()」。

+0

@ Michael Key:對不起......我沒有得到你。每個組每次都獲得元素。所以,在我的示例XML文檔中,我有三個元素和一個元素。因此,在第一次迭代中,我想檢查下一個元素(緊隨其後的元素 - 兄弟姐妹)是或不。如果是,那麼我想打電話給一些模板處理元素,否則不要做任何事情。因此,在這種情況下,下一個元素不是元素。所以,不要在這做任何事情但是當第二次迭代時,下一個元素是(緊接着的下一個)是。 – Saravanan 2012-07-31 08:30:31

+0

繼續...所以,我必須通過選擇元素來調用一個particullar模板。這是我的工作......如果你的答案是這樣,那麼你能否請你解釋更多關於你的答案...... – Saravanan 2012-07-31 08:30:45

+0

:是的,我想要檢查下一個即時跟隨兄弟是否是,如果是,那麼我想每次都在組中調用我的模板... – Saravanan 2012-07-31 08:42:14

相關問題