如何找到等于某事的最后一个兄弟姐妹和第一个跟随兄弟姐妹等于什么?

时间:2016-04-12 23:00:34

标签: xml xslt

1 /我有一个日期在xml中的事件列表。 我想以CSV格式打印每个事件及其日期。如果日期是01/01/1900,则搜索上一个不同的01/01/1900的兄弟姐妹

例如:

<Events>
<Event>
  <Date>17/01/2012</Date>
  <Description>Event 1</Description>
</Event>
<Event>
  <Date>01/01/1900</Date>
  <Description>Event 2</Description>
</Event>
<Event>
  <Date>01/01/1900</Date>
  <Description>Event 3</Description>
</Event>
<Event>
  <Date>20/02/2012</Date>
  <Description>Event 4</Description>
</Event>
<Event>
  <Date>01/01/1900</Date>
  <Description>Event 5</Description>
</Event>
<Event>
  <Date>01/01/1900</Date>
  <Description>Event 6</Description>
</Event>
</Events>

结果:

17/01/2012;Event 1
17/01/2012;Event 2
17/01/2012;Event 3
20/02/2012;Event 4
20/02/2012;Event 5
20/02/2012;Event 6

2 /我有一个日期在xml中的事件列表。 我想以CSV格式打印每个事件及其日期。如果日期是01/01/1900,则搜索不同的01/01/1900

的第一个下一个兄弟

例如:

<Events>
<Event>
  <Date>17/01/2012</Date>
  <Description>Event 1</Description>
</Event>
<Event>
  <Date>01/01/1900</Date>
  <Description>Event 2</Description>
</Event>
<Event>
  <Date>01/01/1900</Date>
  <Description>Event 3</Description>
</Event>
<Event>
  <Date>20/02/2012</Date>
  <Description>Event 4</Description>
</Event>
<Event>
  <Date>01/01/1900</Date>
  <Description>Event 5</Description>
</Event>
<Event>
  <Date>01/01/1900</Date>
  <Description>Event 6</Description>
</Event>
<Event>
  <Date>30/03/2012</Date>
  <Description>Event 7</Description>
</Event>
</Events>

结果:

17/01/2012;Event 1
20/02/2012;Event 2
20/02/2012;Event 3
20/02/2012;Event 4
30/03/2012;Event 5
30/03/2012;Event 6
30/03/2012;Event 7

我找不到查找等于某个值的下一个或上一个项目的方法。 谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

对于第一种情况,请尝试:

<xsl:template match="/Events">
    <xsl:for-each select="Event">
        <xsl:choose>
            <xsl:when test="Date='01/01/1900'">
                <xsl:value-of select="preceding-sibling::Event[Date!='01/01/1900'][1]/Date" />
            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="Date" />
            </xsl:otherwise>
        </xsl:choose>
        <xsl:text>;</xsl:text>
        <xsl:value-of select="Description" />
        <xsl:text>&#10;</xsl:text>
    </xsl:for-each>
</xsl:template>

请注意preceding-siblingreverse axis:最近的兄弟姐妹是第一个,而不是最后一个。