我需要一些XSLT語句,它給了我一些像「LEFT JOIN」的內容:如果選擇的節點確實存在,則返回所有這些節點,否則返回一次。XSL for-each和LEFT JOIN
這與xsl:for-each循環不同,因爲當沒有這樣的節點時,for-each循環返回ZERO行。
這是一個實際的例子。
XML文件:
<root>
<sec1>
<x1/> ... <x1/>
</sec1>
<sec2>
<x2/> ... <x2/>
</sec2>
...
<sec10>
<x10/> ... <x10/>
</sec10>
</root>
現在,我不知道有多少「X1」,「X2」,..「X10」我有,我想打印出所有可能的組合。一個簡單的和錯誤的解決辦法:
<xsl:for-each select="/root/sec1/x1">
<xsl:for-each select="/root/sec2/x2">
...
<xsl:for-each select="/root/sec10/x10">
...print x1 and x2... and x10
</xsl:for-each>
...
</xsl:for-each>
</xsl:for-each>
該解決方案是錯誤的,因爲,如果沒有「×3」則返回0行(就像一個FULL JOIN),而我希望看到所有其他值(如左或右連接)。
我可以結合使用xsl:choose,xls:when,xsl:foreach和xsl:否則這個時間很長。
我試圖建立自己的XSL模板,但它不工作:
<xsl:template name="left-join">
<xsl:param name="select"/>
<xsl:param name="template"/>
<xsl:choose>
<xsl:when test="$select">
<xsl:for-each select="$select">
<xsl:call-template name="$templatename"> <!--WRONG -->
<xsl:with-param name="one-parameter" select="$select"/>
</xsl:call-template>
</xsl:for-each>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="$templatename">
<xsl:with-param name="one-parameter" select="$select"/>
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
不,我不知道,X1,X2,...衝擊片雷管只有一次。他們可以出現任何次數。 XSLT 2.0可以獲得什麼? – user1922691 2013-04-09 15:03:59