Контекст
Это для настраиваемой веб-части запроса (CQWP) в SharePoint 2007 .Я извлекаю список событий из календаря и хочу отобразить список текущего состояния системы для всех систем, даже если у них нет текущего события.
Список упорядочен по имени системы.
XML получено
Предположим, у вас есть либо XML:
<events>
<event>
<system>A</system>
<state>1</state>
</event>
<event>
<system>B</system>
<state>2</state>
</event>
<event>
<system>C</system>
<state>3</state>
</event>
</events>
ИЛИ
<events>
<event>
<system>A</system>
<state>1</state>
</event>
<event>
<system>C</system>
<state>2</state>
</event>
</events>
Примечание : 3 статических система (A, B или C).У них не может быть текущего события (я не указывал дату начала / окончания, поскольку она не нужна для вопроса.)
Требуется вывод данных
Я хочу, чтобы мой вывод XSL был таким:
<table>
<tr>
<th>System</th>
<th>State</th>
</tr>
<tr>
<td>A</td>
<td>1</td>
</tr>
<tr>
<td>B</td>
<td>1</td>
</tr>
<tr>
<td>C</td>
<td>3</td>
</tr>
</table>
То есть я хочу получить вывод для всех 3 систем, , даже если у них нет текущего события (следовательно, не в XML (состояние по умолчанию 1)).Да, да, в одной системе может быть 2+ текущего события.(<td>A</td><td>1</td></tr><tr><td>A</td><td>2</td>
).Ответ perfect объединит одно и то же системное событие и отобразит только самое высокое состояние, но я могу обойтись без него.
Current XSL
Вот текущий шаблон, который у меня есть:
<xsl:template name="system" match="Row[@Style='system']" mode="itemstyle">
<xsl:if test="count(preceding-sibling::*)=0">
<table><tr><th>System</th>
<th>State</th></tr>
</xsl:if>
<tr>
<td><xsl:value-of select="@System"/></td>
<td><xsl:value-of select="@State"/></td>
</tr>
<xsl:if test="count(following-sibling::*)=0">
</table>
</xsl:if>
</xsl:template>
Что я думал
Я думал, что могу использовать переменную (или 3?), Чтобы содержать мой список (статической) системы
<xsl:variable name="Systems">A,B,C</xsl:variable>
<xsl:variable name="System1">A</xsl:variable>
<xsl:variable name="System2">B</xsl:variable>
<xsl:variable name="System3">C</xsl:variable>
Затем в XSLпроверьте, равняется ли <xsl:value-of select="@System"/>
значение этой / этой переменной.
Вопросы
Это выполнимо?
Не могли бы вы предложить мне поступить иначе, если да, то как?
Как сравнить мои переменные с <xsl:value-of select="@System"/>
?
Bonus : Как я могу объединить одно и то же системное событие и отобразить только самое высокое состояние?