У меня есть этот код:
<!--Display the name of the brother assigned-->
<xsl:template match="Name | PrayerOpen | PrayerEnd">
<td class="cellName">
<xsl:choose>
<xsl:when test="//MeetingWorkBook/Settings/ForeignGroupMode='1' and (
../@BookmarkId='2' or ../../@BookmarkId='2' or
../../../@BookmarkId='2'or ../../../../@BookmarkId='2' or
../@BookmarkId='4' or ../../@BookmarkId='4' or
../../../@BookmarkId='4' or ../../../../@BookmarkId='4' or
self::PrayerOpen or self::PrayerEnd)">
<em><xsl:value-of select ="//Labels/MainHall"/></em>
</xsl:when>
<xsl:when test="//MeetingWorkBook/Settings/ForeignGroupMode='1' and .='' and self::Name">
<em><xsl:value-of select ="//Labels/MainHall"/></em>
</xsl:when>
<xsl:when test="@Duplicate=1">
<span class="textDuplicate">
<xsl:value-of select="."/>
</span>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="."/>
</xsl:otherwise>
</xsl:choose>
</td>
</xsl:template>
Работает нормально. У меня есть ряд путей, чтобы я мог найти правильный узел с атрибутом BookmarkId
. Можно ли упростить этот код?
По сути, исходя из контекста текущего узла, я хочу пройтись по родителям, пока он не достигнет узла Meeting
, который является атрибутом.
Пример XML
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="Workbook-S-140-PublicTalk-WatchtowerStudy-ServiceTalk-FGroup-v2.xsl"?>
<MeetingWorkBook>
<Meeting BookmarkId="0" PageBreak="0" NumberClasses="1" SpecialEvent="0">
<PrayerOpen>Name 1</PrayerOpen>
<TFGW NumberClasses="1">
<TFGWItem>
<Name>Name 2</Name>
</TFGWItem>
<TFGWItem>
<Name>Name 3</Name>
</TFGWItem>
</TFGW>
<AYFM NumberClasses="1">
<Teaching>
<Name>Name 4</Name>
</Teaching>
</AYFM>
<LAC CircuitVisit="0">
<LACItem>
<Name>Name 5</Name>
</LACItem>
<PrayerEnd>Name 6</PrayerEnd>
</LAC>
</Meeting>
</MeetingWorkBook>