Я пытаюсь применить шаблон, используя XSLT1, и я не могу заставить его работать:
<xsl:apply-templates select="MeetingWorkBook/Meeting[1]/SpecialEvent/Event[/Date[@AllDayEvent='1']]" mode="FirstRow_Pray">
<xsl:with-param name="strClass">cellBold borderRight</xsl:with-param>
</xsl:apply-templates>
Я пытаюсь применить этот шаблон:
<!--This is used to insert the Chairman, or Special Event-->
<xsl:template match="Chairman | Event" mode="FirstRow_Pray">
<xsl:param name="strClass"/>
<td class="{$strClass}">
<xsl:if test="self::Event">
<xsl:attribute name="rowspan">2</xsl:attribute>
</xsl:if>
<xsl:value-of select="."/>
</td>
</xsl:template>
Но я Я хочу применить шаблон только в том случае, если элемент Event
существует и sibling Date[@AllDayEvent]
имеет значение true.
Я знаю, что могу завершить свой вызов apply-templates
сначала с предложением if
, и это сработало бы (см. ниже).
Я знаю, что могу улучшить logi c шаблона Event
, чтобы проверить значение родственного брата атрибут элементов.
У меня есть много шаблонов для использования определенных c Event
свойств, и я предпочел бы возможность выбрать элемент Event
, где его родственный элемент Date
имеет определенный значение атрибута.
Но моя попытка не работает. Я видел этот ответ и пытался:
MeetingWorkBook/Meeting[1]/SpecialEvent/Event[Date[@AllDayEvent='1']]
Но он все равно не работает.
Это будет работать:
<xsl:if test="MeetingWorkBook/Meeting[1]/SpecialEvent/Date[@AllDayEvent='1']">
<xsl:apply-templates select="MeetingWorkBook/Meeting[1]/SpecialEvent/Event" mode="FirstRow_Pray">
<xsl:with-param name="strClass">cellBold borderRight</xsl:with-param>
</xsl:apply-templates>
</xsl:if>
Но я хочу избегать необходимости if
, если это возможно.
Теперь я вижу, что не так с моей первоначальной попыткой. Date
не ребенок Event
, а брат .
MeetingWorkBook/Meeting[1]/SpecialEvent/Date
MeetingWorkBook/Meeting[1]/SpecialEvent/Event
Так можно ли применить шаблон к Event
, где у брата Date
есть атрибут AllDayEvent
со значением 1
. Или у меня нет выбора, кроме как использовать if
подход?
Образец XML данных:
<Meeting BookmarkId="2" PageBreak="0" NumberClasses="1" SpecialEvent="1" CircuitVisit="0">
<Date ThisWeek="W20200217" NextWeek="W20200224">February 17-23</Date>
<WeeklyBibleReading>GENESIS 18-19</WeeklyBibleReading>
<ReviewQuestion></ReviewQuestion>
<SpecialEvent>
<Event>Circuit Assembly - Love Jehovah With All Your Heart</Event>
<Location>Bristol Assembly Hall, Hortham Lane, Bristol, BS32 4JH</Location>
<Date Day="23" DayShort="Sun" DayFull="Sunday" Month="2" MonthShort="Feb" MonthFull="February" Year="2020" Memorial="0" AllDayEvent="1" MidweekEvent="1">23/02/2020</Date>
</SpecialEvent>
</Meeting>