读取 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>=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>
我有一个 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>=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>