Отобразить абзац один раз, если выполнены условия tempalte - Xsl 1 - PullRequest
0 голосов
/ 18 июня 2020

Я пытаюсь отредактировать письмо, отформатированное с помощью XSL 1, чтобы отобразить одну строку, если мои условия шаблона выполнены, и информация отображается в почте. Письмо имеет текущий формат:

People attending:

   person1
       -someinfo

   person2
       -someinfo

People not attending:

   person3
       -someinfo

Проблема в том, что когда ничего не отображается для людей, которые не присутствуют, в письме по-прежнему будет отображаться сообщение «Люди не присутствуют:», так как оно есть у меня до запуска приложения. шаблон.

Есть ли какой-нибудь хороший способ отобразить абзац перед информацией о людях, которые не присутствуют, только если есть люди, которые не приходят? Причина использования двух шаблонов в том, что в моем исходном коде я проверяю наличие изменений в файле xml.

Код:

<p>People not attending</p>
<xsl:apply-templates select="1_type/2_group/1_type_f" mode="pn"/>

<xsl:template match="1_type_f" mode="pn">
    <xsl:if test="((1_type_f_v/@old_selected='Selected') and (1_type_f_v/@selected!='Selected'))">
        <xsl:apply-templates select="t1_type_f_v" mode="pn"/>
    </xsl:if>
</xsl:template>

<xsl:template match="1_type_f_v" mode="pn">
    <xsl:if test="((@old_selected='Selected') and (@selected!='Selected'))">
        <p><xsl:value-of select="../nameOfPerson"/></p>
        <ul>
            <li><xsl:value-of select="someInfo"/></li>
            <p><xsl:value-of select="someInfo2"/></p>
        </ul>
    </xsl:if>
</xsl:template>

1 Ответ

1 голос
/ 18 июня 2020

Вместо вывода

<p>People not attending</p>
<xsl:apply-templates select="1_type/2_group/1_type_f" mode="pn"/>

безоговорочно вам нужно использовать xsl:if

<xsl:if test="1_type/2_group/1_type_f">
    <p>People not attending</p>
    <xsl:apply-templates select="1_type/2_group/1_type_f" mode="pn"/>
</xsl:if>

Я не совсем уверен, достаточно ли условия xsl:if test, которое я использовал выше, я предположим, что это может быть не так, поэтому вам нужно будет посмотреть, можете ли вы адаптировать его, чтобы проверить, есть ли на входе какие-либо элементы, которые вы будете там выводить.

Другой вариант - запустить шаблоны apply в переменную, преобразовать ее в набор узлов с помощью exsl:node-set или аналогичного, а затем проверить, есть ли у него какое-либо соответствующее содержимое, и только после этого вывести заголовок ( или в вашем случае p) и содержимое переменной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...