DVWP сортировка данных с XSLT и удаление дубликатов
-
09-12-2019 - |
Вопрос
Я работаю с SharePoint 2007. Я пытаюсь изменить DVWP с XSLT.
Веб-часть вытаскивает данные из списка, то, что я хочу сделать, это просто отсортировать данные и показать результаты. - Я не могу отсортировать данные напрямую, потому что мне нужно сортировать / группу по полю, которое является выбором, поэтому я не могу.
Единственное жизнеспособное решение для меня было изменение XSLT. Все пошло хорошо и хорошо, пока не сталкиваюсь с проблемой, и эта проблема добрая странная.
Когда я использую сорт, он не показывает первое значение из таблицы! Когда я удаляю сорт, у меня есть 4 (уникальные) значения, которые я должен иметь, но они не являются порядком, как только я получу свой сортировку внутри, я получаю 3 уникальных значения, которые пропускают первую. И я не понимаю, как это даже возможно.
Я предоставлю вам кусочки XSLT, которые я использую, как это мой активой, чтобы помочь мне понять, что я делаю не так.
Для различных уникальных значений, которые я использую это:
<xsl:key name="ByCategory" match="/dsQueryResponse/Rows/Row" use="@Category" />
.
В этой подгруппе (суб-шаблон) я получаю это странное поведение:
<xsl:call-template name="dvt_2.body">
<xsl:with-param name="Rows" select="$Rows" />
</xsl:call-template>
<xsl:template name="dvt_2.body">
<xsl:param name="Rows" />
<td>
<xsl:for-each select="$Rows[generate-id()=generate-id(key('ByCategory',@Category)[1])]">
<xsl:sort select="@Category"/>
<xsl:call-template name="dvt_2.rowview">
</xsl:call-template>
</xsl:for-each>
</td>
</xsl:template>
.
Как я уже говорил, если я удалю своего рода, все будет хорошо, но несортировано, но мне нужна сортировка.
Любая идея?
Спасибо заранее
PS: если требуется полный код XSLT, я предоставлю.
Решение
Я нашел решение и хочу поделиться с остальным, может быть, это поможет им в будущем или тех, кто может столкнуться с той же проблемой.
Таким образом, фактическая проблема была в IF Test, который не позволил первому узеру Pass:
<xsl:template name="dvt_2.rowview">
<xsl:if test="(position()=1)or(@Category!= (preceding-sibling::*[1]/@Category))">
//xslt
</xsl:if>
</xsl:template>
.
Так что каждый раз, когда я назвал его, Specifiek вторая категория отсортированного списка (или первая категория несортированного списка) не проходила, если и именно поэтому я не мог распечатать его.
Удаление этого, если тест, решил проблему.
Надеюсь, это будет полезно для других