假定給出變量稱爲行,其包含以下(實施例)(XSLT 1.0。):XSL存儲節點集合中可變
輸入
<AllResults>
<Result>
<subject>can be filtered by filter 1</subject>
<type>can be filtered by filter 2</type>
<date>can be filtered by filter 3</date>
</Result>
<Result> ...
</Result>
</AllResults>
我有3名濾波器的變量。對於每個過濾器,如果過濾器變量不爲空,我想將過濾器應用於上面顯示的輸入。我想將篩選結果(匹配篩選器的項目)存儲到新變量中。我嘗試了以下,但我得到了關於它的錯誤消息(filterResult)是「結果樹而不是節點集」。行變量是一個節點集,正如我通過使用調試器所確定的那樣。在XSL的
部分
<xsl:variable name="filterResult">
<xsl:choose>
<xsl:when test="$filter1 != '' and $filter2 != '' and $filter3 != ''">
<xsl:copy-of select="$Rows[date=$filter1 and type=$filter2 and subject=$filter3]" />
</xsl:when>
<xsl:when test="$filter1 != '' and $filter2 != ''">
<xsl:copy-of select="$Rows[date=$filter1 and type=$filter2]" />
</xsl:when>
<xsl:when test="$filter1 != '' and $filter3 != ''">
<xsl:copy-of select="$Rows[date=$filter1 and subject=$filter3]" />
</xsl:when>
<xsl:when test="$filter3 != '' and $filter2 != ''">
<xsl:copy-of select="$Rows[type=$filter2 and subject=$filter3]" />
</xsl:when>
<xsl:when test="$filter1 != ''">
<xsl:copy-of select="$Rows[date=$filter1]" />
</xsl:when>
<xsl:when test="$filter3 != ''">
<xsl:copy-of select="$Rows[subject=$filter3]" />
</xsl:when>
<xsl:when test="$filter2 != ''">
<xsl:copy-of select="$Rows[type=$filter2]" />
</xsl:when>
<xsl:otherwise>
<xsl:copy-of select="$Rows" />
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
我意識到複製的產生結果樹,而不是一個節點集,但我不知道給我的3個濾波器的需求如何產生一個節點集我上面描述過。
附加信息
我知道我可以做類似<xsl:variable name="me" select="/set/node"/>
這將創建一個包含節點設置,但我不知道怎麼幫助我,因爲我有很多可能的條件變量(給定三個過濾器)。
「它看起來像$ Rows變量是類型結果樹片段的一個實例。」它不是..我已經使用調試器驗證過它是節點集。然而,「filterResult」最終是一個結果樹片段,我希望它是一個節點集。 – KyleM 2011-03-14 18:35:34
@KyleM:你沒有顯示'$ Rows'聲明,也沒有顯示'$ filterResult'的用法。我們無法猜測。 – 2011-03-14 18:40:49
順便說一句,這是xslt 1.0,它不能根據我讀過的內容將結果樹片段作爲節點集處理。 – KyleM 2011-03-14 18:41:24