Xml 是否可以在模板调用中显示已知同级的值?

Xml 是否可以在模板调用中显示已知同级的值?,xml,xslt,Xml,Xslt,这是一段精简的XML片段: <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="WEEK-AYFM.xsl"?> <MeetingWorkBook> <Meeting> <LAC CircuitVisit="0"> <SongEnd Title="“This Is the Way”" StartTime1

这是一段精简的XML片段:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="WEEK-AYFM.xsl"?>
<MeetingWorkBook>
  <Meeting>
    <LAC CircuitVisit="0">
      <SongEnd Title="“This Is the Way”" StartTime12="8:55" StartTime24="20:55" EndTime12="9:00" EndTime24="21:00">65</SongEnd>
      <PrayerEnd>Brother 8</PrayerEnd>
    </LAC>
  </Meeting>
</MeetingWorkBook>

65
兄弟八
这是一个调用XSL的过程:

  <xsl:template match="LAC">
    <table class="tableLAC">
      <xsl:apply-templates select="SongEnd">
        <xsl:with-param name="strPrayerEnd">
          <xsl:value-of select="PrayerEnd"/>
        </xsl:with-param>
      </xsl:apply-templates>
    </table>
  </xsl:template>

  <xsl:template match="SongEnd">
    <xsl:param name="strPrayerEnd" />
    <tr>
      <td class="cellTime">
        <xsl:value-of select="@EndTime24"/>
      </td>
      <td>
        <div class="floatRight">
          Prayer:
        </div>
        <span class="bulletLAC">&#8226;</span>
        <span class="textSongLabel">Song</span>
        <span class="textSongNumber">
          <xsl:value-of select="."/>
        </span>
      </td>
      <td>
        <xsl:value-of select="$strPrayerEnd"/>
      </td>
    </tr>
  </xsl:template>

祈祷:
•
歌曲

SongEnd模板是否可以直接访问rajerend值,而无需我将其作为参数进行传递?

在与
SongEnd
匹配的模板中,上下文节点是
SongEnd
元素。然后,可以使用简单的XPath表达式选择模板中与上下文节点相关的
rajerend
节点

例如,如果
rajerend
始终是
SongEnd
的以下兄弟姐妹,则您可以编写

<xsl:value-of select="following-sibling::PrayerEnd"/>


不使用参数。

在匹配
SongEnd
的模板中,上下文节点是
SongEnd
元素。然后,可以使用简单的XPath表达式选择模板中与上下文节点相关的
rajerend
节点

例如,如果
rajerend
始终是
SongEnd
的以下兄弟姐妹,则您可以编写

<xsl:value-of select="following-sibling::PrayerEnd"/>


不使用参数。

正如我在评论中所说的,我相信您使这个问题变得比需要的更复杂。以下任一样式表将产生与当前样式表相同的结果:

1.

<xsl:template match="LAC">
    <table class="tableLAC">
        <tr>
            <td class="cellTime">
                <xsl:value-of select="SongEnd/@EndTime24"/>
            </td>
            <td>
                <div class="floatRight">
                  Prayer:
                </div>
                <span class="bulletLAC">&#8226;</span>
                <span class="textSongLabel">Song</span>
                <span class="textSongNumber">
                    <xsl:value-of select="SongEnd"/>
                </span>
            </td>
            <td>
                <xsl:value-of select="PrayerEnd"/>
            </td>
        </tr>
    </table>
</xsl:template>
<xsl:template match="LAC">
    <table class="tableLAC">
        <tr>
            <xsl:apply-templates select="SongEnd"/>
            <td>
                <xsl:value-of select="PrayerEnd"/>
            </td>
        </tr>
    </table>
</xsl:template>

<xsl:template match="SongEnd">
    <td class="cellTime">
        <xsl:value-of select="@EndTime24"/>
    </td>
    <td>
        <div class="floatRight">
          Prayer:
        </div>
        <span class="bulletLAC">&#8226;</span>
        <span class="textSongLabel">Song</span>
        <span class="textSongNumber">
            <xsl:value-of select="."/>
        </span>
    </td>
</xsl:template>
<xsl:template match="LAC">
    <table class="tableLAC">
        <tr>
            <xsl:apply-templates/>
        </tr>
    </table>
</xsl:template>

<xsl:template match="SongEnd">
    <td class="cellTime">
        <xsl:value-of select="@EndTime24"/>
    </td>
    <td>
        <div class="floatRight">
          Prayer:
        </div>
        <span class="bulletLAC">&#8226;</span>
        <span class="textSongLabel">Song</span>
        <span class="textSongNumber">
            <xsl:value-of select="."/>
        </span>
    </td>
</xsl:template>

<xsl:template match="PrayerEnd">      
    <td>
        <xsl:value-of select="."/>
    </td>
</xsl:template>

祈祷:
•
歌曲
2.

<xsl:template match="LAC">
    <table class="tableLAC">
        <tr>
            <td class="cellTime">
                <xsl:value-of select="SongEnd/@EndTime24"/>
            </td>
            <td>
                <div class="floatRight">
                  Prayer:
                </div>
                <span class="bulletLAC">&#8226;</span>
                <span class="textSongLabel">Song</span>
                <span class="textSongNumber">
                    <xsl:value-of select="SongEnd"/>
                </span>
            </td>
            <td>
                <xsl:value-of select="PrayerEnd"/>
            </td>
        </tr>
    </table>
</xsl:template>
<xsl:template match="LAC">
    <table class="tableLAC">
        <tr>
            <xsl:apply-templates select="SongEnd"/>
            <td>
                <xsl:value-of select="PrayerEnd"/>
            </td>
        </tr>
    </table>
</xsl:template>

<xsl:template match="SongEnd">
    <td class="cellTime">
        <xsl:value-of select="@EndTime24"/>
    </td>
    <td>
        <div class="floatRight">
          Prayer:
        </div>
        <span class="bulletLAC">&#8226;</span>
        <span class="textSongLabel">Song</span>
        <span class="textSongNumber">
            <xsl:value-of select="."/>
        </span>
    </td>
</xsl:template>
<xsl:template match="LAC">
    <table class="tableLAC">
        <tr>
            <xsl:apply-templates/>
        </tr>
    </table>
</xsl:template>

<xsl:template match="SongEnd">
    <td class="cellTime">
        <xsl:value-of select="@EndTime24"/>
    </td>
    <td>
        <div class="floatRight">
          Prayer:
        </div>
        <span class="bulletLAC">&#8226;</span>
        <span class="textSongLabel">Song</span>
        <span class="textSongNumber">
            <xsl:value-of select="."/>
        </span>
    </td>
</xsl:template>

<xsl:template match="PrayerEnd">      
    <td>
        <xsl:value-of select="."/>
    </td>
</xsl:template>

祈祷:
•
歌曲
3.

<xsl:template match="LAC">
    <table class="tableLAC">
        <tr>
            <td class="cellTime">
                <xsl:value-of select="SongEnd/@EndTime24"/>
            </td>
            <td>
                <div class="floatRight">
                  Prayer:
                </div>
                <span class="bulletLAC">&#8226;</span>
                <span class="textSongLabel">Song</span>
                <span class="textSongNumber">
                    <xsl:value-of select="SongEnd"/>
                </span>
            </td>
            <td>
                <xsl:value-of select="PrayerEnd"/>
            </td>
        </tr>
    </table>
</xsl:template>
<xsl:template match="LAC">
    <table class="tableLAC">
        <tr>
            <xsl:apply-templates select="SongEnd"/>
            <td>
                <xsl:value-of select="PrayerEnd"/>
            </td>
        </tr>
    </table>
</xsl:template>

<xsl:template match="SongEnd">
    <td class="cellTime">
        <xsl:value-of select="@EndTime24"/>
    </td>
    <td>
        <div class="floatRight">
          Prayer:
        </div>
        <span class="bulletLAC">&#8226;</span>
        <span class="textSongLabel">Song</span>
        <span class="textSongNumber">
            <xsl:value-of select="."/>
        </span>
    </td>
</xsl:template>
<xsl:template match="LAC">
    <table class="tableLAC">
        <tr>
            <xsl:apply-templates/>
        </tr>
    </table>
</xsl:template>

<xsl:template match="SongEnd">
    <td class="cellTime">
        <xsl:value-of select="@EndTime24"/>
    </td>
    <td>
        <div class="floatRight">
          Prayer:
        </div>
        <span class="bulletLAC">&#8226;</span>
        <span class="textSongLabel">Song</span>
        <span class="textSongNumber">
            <xsl:value-of select="."/>
        </span>
    </td>
</xsl:template>

<xsl:template match="PrayerEnd">      
    <td>
        <xsl:value-of select="."/>
    </td>
</xsl:template>

祈祷:
•
歌曲

正如我在评论中所说的,我相信你让事情变得比实际需要的更复杂了。以下任一样式表将产生与当前样式表相同的结果:

1.

<xsl:template match="LAC">
    <table class="tableLAC">
        <tr>
            <td class="cellTime">
                <xsl:value-of select="SongEnd/@EndTime24"/>
            </td>
            <td>
                <div class="floatRight">
                  Prayer:
                </div>
                <span class="bulletLAC">&#8226;</span>
                <span class="textSongLabel">Song</span>
                <span class="textSongNumber">
                    <xsl:value-of select="SongEnd"/>
                </span>
            </td>
            <td>
                <xsl:value-of select="PrayerEnd"/>
            </td>
        </tr>
    </table>
</xsl:template>
<xsl:template match="LAC">
    <table class="tableLAC">
        <tr>
            <xsl:apply-templates select="SongEnd"/>
            <td>
                <xsl:value-of select="PrayerEnd"/>
            </td>
        </tr>
    </table>
</xsl:template>

<xsl:template match="SongEnd">
    <td class="cellTime">
        <xsl:value-of select="@EndTime24"/>
    </td>
    <td>
        <div class="floatRight">
          Prayer:
        </div>
        <span class="bulletLAC">&#8226;</span>
        <span class="textSongLabel">Song</span>
        <span class="textSongNumber">
            <xsl:value-of select="."/>
        </span>
    </td>
</xsl:template>
<xsl:template match="LAC">
    <table class="tableLAC">
        <tr>
            <xsl:apply-templates/>
        </tr>
    </table>
</xsl:template>

<xsl:template match="SongEnd">
    <td class="cellTime">
        <xsl:value-of select="@EndTime24"/>
    </td>
    <td>
        <div class="floatRight">
          Prayer:
        </div>
        <span class="bulletLAC">&#8226;</span>
        <span class="textSongLabel">Song</span>
        <span class="textSongNumber">
            <xsl:value-of select="."/>
        </span>
    </td>
</xsl:template>

<xsl:template match="PrayerEnd">      
    <td>
        <xsl:value-of select="."/>
    </td>
</xsl:template>

祈祷:
•
歌曲
2.

<xsl:template match="LAC">
    <table class="tableLAC">
        <tr>
            <td class="cellTime">
                <xsl:value-of select="SongEnd/@EndTime24"/>
            </td>
            <td>
                <div class="floatRight">
                  Prayer:
                </div>
                <span class="bulletLAC">&#8226;</span>
                <span class="textSongLabel">Song</span>
                <span class="textSongNumber">
                    <xsl:value-of select="SongEnd"/>
                </span>
            </td>
            <td>
                <xsl:value-of select="PrayerEnd"/>
            </td>
        </tr>
    </table>
</xsl:template>
<xsl:template match="LAC">
    <table class="tableLAC">
        <tr>
            <xsl:apply-templates select="SongEnd"/>
            <td>
                <xsl:value-of select="PrayerEnd"/>
            </td>
        </tr>
    </table>
</xsl:template>

<xsl:template match="SongEnd">
    <td class="cellTime">
        <xsl:value-of select="@EndTime24"/>
    </td>
    <td>
        <div class="floatRight">
          Prayer:
        </div>
        <span class="bulletLAC">&#8226;</span>
        <span class="textSongLabel">Song</span>
        <span class="textSongNumber">
            <xsl:value-of select="."/>
        </span>
    </td>
</xsl:template>
<xsl:template match="LAC">
    <table class="tableLAC">
        <tr>
            <xsl:apply-templates/>
        </tr>
    </table>
</xsl:template>

<xsl:template match="SongEnd">
    <td class="cellTime">
        <xsl:value-of select="@EndTime24"/>
    </td>
    <td>
        <div class="floatRight">
          Prayer:
        </div>
        <span class="bulletLAC">&#8226;</span>
        <span class="textSongLabel">Song</span>
        <span class="textSongNumber">
            <xsl:value-of select="."/>
        </span>
    </td>
</xsl:template>

<xsl:template match="PrayerEnd">      
    <td>
        <xsl:value-of select="."/>
    </td>
</xsl:template>

祈祷:
•
歌曲
3.

<xsl:template match="LAC">
    <table class="tableLAC">
        <tr>
            <td class="cellTime">
                <xsl:value-of select="SongEnd/@EndTime24"/>
            </td>
            <td>
                <div class="floatRight">
                  Prayer:
                </div>
                <span class="bulletLAC">&#8226;</span>
                <span class="textSongLabel">Song</span>
                <span class="textSongNumber">
                    <xsl:value-of select="SongEnd"/>
                </span>
            </td>
            <td>
                <xsl:value-of select="PrayerEnd"/>
            </td>
        </tr>
    </table>
</xsl:template>
<xsl:template match="LAC">
    <table class="tableLAC">
        <tr>
            <xsl:apply-templates select="SongEnd"/>
            <td>
                <xsl:value-of select="PrayerEnd"/>
            </td>
        </tr>
    </table>
</xsl:template>

<xsl:template match="SongEnd">
    <td class="cellTime">
        <xsl:value-of select="@EndTime24"/>
    </td>
    <td>
        <div class="floatRight">
          Prayer:
        </div>
        <span class="bulletLAC">&#8226;</span>
        <span class="textSongLabel">Song</span>
        <span class="textSongNumber">
            <xsl:value-of select="."/>
        </span>
    </td>
</xsl:template>
<xsl:template match="LAC">
    <table class="tableLAC">
        <tr>
            <xsl:apply-templates/>
        </tr>
    </table>
</xsl:template>

<xsl:template match="SongEnd">
    <td class="cellTime">
        <xsl:value-of select="@EndTime24"/>
    </td>
    <td>
        <div class="floatRight">
          Prayer:
        </div>
        <span class="bulletLAC">&#8226;</span>
        <span class="textSongLabel">Song</span>
        <span class="textSongNumber">
            <xsl:value-of select="."/>
        </span>
    </td>
</xsl:template>

<xsl:template match="PrayerEnd">      
    <td>
        <xsl:value-of select="."/>
    </td>
</xsl:template>

祈祷:
•
歌曲

请澄清:
LAC
能否包含多个
SongEnd
和/或
rajerend
?如果是,请解释它们在
LAC
元素中的排列方式。每个元素只有一个。那么,您为什么不在
LAC
的上下文中处理这个问题呢?显然,您的表只有一行,所以为什么不在第一个模板中创建它呢?如果您愿意的话,可以将模板应用于两个子项,并让每个子项创建一个单元格。没有必要这么复杂地跳来跳去。嗨。你能告诉我你的意思吗?请注意,我将在LAC节点中有其他数据。我只是将其删减以隔离我的问题。请澄清:
LAC
是否可以包含多个
SongEnd
和/或
rajerend
?如果是,请解释它们在
LAC
元素中的排列方式。每个元素只有一个。那么,您为什么不在
LAC
的上下文中处理这个问题呢?显然,您的表只有一行,所以为什么不在第一个模板中创建它呢?如果您愿意的话,可以将模板应用于两个子项,并让每个子项创建一个单元格。没有必要这么复杂地跳来跳去。嗨。你能告诉我你的意思吗?请注意,我将在LAC节点中有其他数据。我只是把它删减以隔离我的问题。这很有效,谢谢。PrayError节点将始终跟随SongEnd节点。@ AndrewTruckle,如果这解决了您的问题,请考虑将答案标记为接受(投票摇杆下的勾选框)。它将帮助未来的用户更快地找到答案。这很有效,谢谢。PrayError节点将始终跟随SongEnd节点。@ AndrewTruckle,如果这解决了您的问题,请考虑将答案标记为接受(投票摇杆下的勾选框)。这将帮助未来的用户更快地找到答案。谢谢。有道理。我使用了选项2。我会看看能不能在别处做。谢谢。有道理。我使用了选项2。我会看看我是否能在其他地方做到这一点。