(XSLT 1.0.)
Дана переменная с именем Rows, которая содержит следующее (пример):
Input
<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), являющееся «деревом результатов вместо набора узлов». Переменная Rows - это набор узлов, как я определил с помощью отладчика.
Часть 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>
Я понимаю, что copy-of создает дерево результатов, а не набор узлов, но я не уверен, КАК производить набор узлов, учитывая мои требования к 3 фильтрам, которые я описал выше.
Дополнительная информация
Я знаю, что мог бы сделать что-то вроде <xsl:variable name="me" select="/set/node"/>
, которое могло бы создать переменную, содержащую набор узлов, но я не понимаю, как это мне помогает, поскольку у меня много возможных условий (учитывая три фильтра).