由於Ian Roberts解釋說,在XSLT中沒有突破循環的概念。你必須事先決定你想要處理什麼節點,聽起來你只是在第一個abc元素中有趣的元素,其中包含'2''。
它可能實際上最好使用xsl:apply-templates這裏。
<xsl:apply-templates select="abc[not(preceding-sibling::abc[contains(xyz, '2)')])]" />
因此,這將選擇所有沒有前面'2)'元素的元素。
接下來,您可以添加模板匹配ABC元素取決於XYZ元素的內容。例如,輸出「XSL_1.0編程」,如果它有一個「2)」中執行以下操作
<xsl:template match="abc[contains(xyz, '2)')]">
<xsl:text>XSL_1.0 Programming</xsl:text>
</xsl:template>
以下是完整的XSLT
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/*">
<xsl:apply-templates select="abc[not(preceding-sibling::abc[contains(xyz, '2)')])]" />
</xsl:template>
<xsl:template match="abc">
<xsl:value-of select="concat(xyz, ' ')" />
</xsl:template>
<xsl:template match="abc[contains(xyz, '2)')]">
<xsl:text>XSL_1.0 Programming </xsl:text>
</xsl:template>
</xsl:stylesheet>
當應用於以下XML(注它有一個根元素)
<root>
<abc>
<def>some text1</def>
<xyz>stack overflow</xyz>
</abc>
<abc>
<def>some text2</def>
<xyz>stack overflow 2)</xyz>
</abc>
<abc>
<def>some text3</def>
<xyz>stack overflow</xyz>
</abc>
<abc>
<def>some text</def>
<xyz>stack overflow 3)</xyz>
</abc>
</root>
以下是輸出
stack overflow
XSL_1.0 Programming
[你有什麼嘗試?](http://whathaveyoutried.com) –
我試圖使用位置和布爾函數,但沒有取得任何成果,因爲我們可以檢查直到值「2)」來臨或沒有爲 。但是,只要達到目標,我就無法打破循環。我沒有得到打破循環的想法。 –
Kundan
你會如此友善地向我們展示你試過的東西嗎? – JLRishe