读取 XML 文件中的 *next* 节点(通过 XSL)

Reading the *next* node in a XML file (via XSL)

我有一个 XSL 文件,它使用循环读取一组特定的节点:

现在,我不知道这是否可行....当我在循环中时,是否可以访问循环中的 "next" 节点进行一些分析?

或者,如果这不可能,我可以在这个循环中有选择地读取另一个 XML 文件中的特定节点数据吗?

这里是一些 XML 数据:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="test.xsl"?>
<MeetingWorkBook>
    <Meeting>
        <BibleReadingM StudyPoint="1" StudyPointDescription="Accurate Reading">Name 1</BibleReadingM>
    </Meeting>
    <Meeting>
        <BibleReadingM StudyPoint="2" StudyPointDescription="Accurate Reading">Name 2</BibleReadingM>
        <BibleReading1 StudyPoint="3" StudyPointDescription="Accurate Reading">Name 3</BibleReading1>
        <StudentTalk1M StudyPoint="4" StudyPointDescription="Accurate Reading">Name 4</StudentTalk1M>
        <StudentTalk1MA>Name 5</StudentTalk1MA>
        <StudentTalk2M StudyPoint="5" StudyPointDescription="Accurate Reading">Name 6</StudentTalk2M>
        <StudentTalk2MA>Name 7</StudentTalk2MA>
        <StudentTalk3M StudyPoint="6" StudyPointDescription="Accurate Reading">Name 8</StudentTalk3M>
        <StudentTalk3MA>Name 9</StudentTalk3MA>
        <StudentTalk11 StudyPoint="7" StudyPointDescription="Accurate Reading">Name 10</StudentTalk11>
        <StudentTalk11A>Name 11</StudentTalk11A>
        <StudentTalk21 StudyPoint="8" StudyPointDescription="Accurate Reading">Name 12</StudentTalk21>
        <StudentTalk21A>Name 13</StudentTalk21A>
        <StudentTalk31 StudyPoint="9" StudyPointDescription="Accurate Reading">Name 14</StudentTalk31>
        <StudentTalk31A>Name 15</StudentTalk31A>
    </Meeting>
    <Meeting>
        <BibleReadingM StudyPoint="10" StudyPointDescription="Accurate Reading">Name 16</BibleReadingM>
        <StudentTalk1M StudyPoint="11" StudyPointDescription="Accurate Reading">Name 17</StudentTalk1M>
        <StudentTalk1MA>Name 18</StudentTalk1MA>
        <StudentTalk2M StudyPoint="12" StudyPointDescription="Accurate Reading">Name 19</StudentTalk2M>
        <StudentTalk2MA>Name 20</StudentTalk2MA>
        <StudentTalk3M StudyPoint="13" StudyPointDescription="Accurate Reading">Name 21</StudentTalk3M>
        <StudentTalk3MA>Name 22</StudentTalk3MA>
    </Meeting>
    <Meeting>
        <BibleReadingM StudyPoint="14" StudyPointDescription="Accurate Reading">Name 23</BibleReadingM>
        <BibleReading1 StudyPoint="15" StudyPointDescription="Accurate Reading">Name 24</BibleReading1>
        <StudentTalk1M StudyPoint="16" StudyPointDescription="Accurate Reading">Name 25</StudentTalk1M>
        <StudentTalk1MA>Name 26</StudentTalk1MA>
        <StudentTalk2M StudyPoint="17" StudyPointDescription="Accurate Reading">Name 27</StudentTalk2M>
        <StudentTalk2MA>Name 28</StudentTalk2MA>
        <StudentTalk3M StudyPoint="18" StudyPointDescription="Accurate Reading">Name 29</StudentTalk3M>
        <StudentTalk3MA>Name 30</StudentTalk3MA>
        <StudentTalk11 StudyPoint="19" StudyPointDescription="Accurate Reading">Name 31</StudentTalk11>
        <StudentTalk11A>Name 32</StudentTalk11A>
        <StudentTalk21 StudyPoint="20" StudyPointDescription="Accurate Reading">Name 33</StudentTalk21>
        <StudentTalk21A>Name 34</StudentTalk21A>
        <StudentTalk31 StudyPoint="21" StudyPointDescription="Accurate Reading">Name 35</StudentTalk31>
        <StudentTalk31A>Name 36</StudentTalk31A>
    </Meeting>
</MeetingWorkBook>

所以我想制作一个带有 for-each 循环的 XSL,它可以从 "current" 会议节点访问下一个 "meeting" 节点。

明白了吗?谢谢

感谢@DanielHaley,我发现我必须使用 following-sibling::Meeting[1].

这是我使用 following-sibling 方法的最终脚本:

<xsl:if test="position()!=last()">
    <!--No, it is not the last meeting. Show next weeks student assignments.-->

    <!--Is next week a special event?-->
    <xsl:if test="following-sibling::Meeting[1]/SpecialEvent=0">
    <!--No, it is not a special event.-->
        Next weeks students are:<br />
        Main:<br />
        <xsl:value-of select="following-sibling::Meeting[1]/BibleReadingM"/><br />
        <xsl:value-of select="following-sibling::Meeting[1]/StudentTalk1M"/> / <xsl:value-of select="following-sibling::Meeting[1]/StudentTalk1MA"/><br />
        <xsl:value-of select="following-sibling::Meeting[1]/StudentTalk2M"/> / <xsl:value-of select="following-sibling::Meeting[1]/StudentTalk2MA"/><br />
        <xsl:value-of select="following-sibling::Meeting[1]/StudentTalk3M"/> / <xsl:value-of select="following-sibling::Meeting[1]/StudentTalk3MA"/><br />
    </xsl:if>

    <!--Auxiliary class 1-->
    <xsl:if test="following-sibling::Meeting[1]/NumberClasses&gt;=2">
        <br />
        Auxiliary class 1:<br />
        <xsl:value-of select="following-sibling::Meeting[1]/BibleReading1"/><br />
        <xsl:value-of select="following-sibling::Meeting[1]/StudentTalk11"/> / <xsl:value-of select="following-sibling::Meeting[1]/StudentTalk11A"/><br />
        <xsl:value-of select="following-sibling::Meeting[1]/StudentTalk21"/> / <xsl:value-of select="following-sibling::Meeting[1]/StudentTalk21A"/><br />
        <xsl:value-of select="following-sibling::Meeting[1]/StudentTalk31"/> / <xsl:value-of select="following-sibling::Meeting[1]/StudentTalk31A"/><br />
    </xsl:if>

    <!--Auxiliary class 2-->
    <xsl:if test="following-sibling::Meeting[1]/NumberClasses=3">
        <br />
        Auxiliary class 2:<br />
        <xsl:value-of select="following-sibling::Meeting[1]/BibleReading2"/><br />
        <xsl:value-of select="following-sibling::Meeting[1]/StudentTalk12"/> / <xsl:value-of select="following-sibling::Meeting[1]/StudentTalk12A"/><br />
        <xsl:value-of select="following-sibling::Meeting[1]/StudentTalk22"/> / <xsl:value-of select="following-sibling::Meeting[1]/StudentTalk22A"/><br />
        <xsl:value-of select="following-sibling::Meeting[1]/StudentTalk32"/> / <xsl:value-of select="following-sibling::Meeting[1]/StudentTalk32A"/><br />
    </xsl:if>
</xsl:if>