<Urmel>
<T>0</T>
<T>6</T>
<T>12</T>
<T>18</T>
<T>24</T>
<B>15</B>
<B>6</B>
<B>7</B>
<B>12</B>
<B>9</B>
<B>10</B>
</Urmel>
A <T> indicates a point in time. <T>s are ordered numerically. Direct
siblings define an interval starting at the earlier <T> and ending
before the later <T>.
A <B> is an event scheduled for a point in time.
I want to find all <T>s that start an interval which includes at least
one event. All <T>s except the last one start an interval. The next
following sibling ends the interval. This is easy. If the count of <B>s
for the interval is zero, the interval is empty and I'm not interested;
else I want it in the output. Determining emptiness isn't easy - yet.
The following produces empty output and hence doesn't work, but you
probably can see my intention. Using the current() function, I'm trying
to refer to the current <T> to find out if the current <B> contained in
$b falls within the bounds of the interval, but without success.
This may fail because I'm nesting predicates and would need another
variable instead of the current() function, but I can't figure out how
to solve this, and maybe the problem can be reframed more intelligently.
XSL 1.0 is required.
<xsl:transform version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:variable name="b" select="//B"/>
<xsl:apply-templates select="
//T [ position() != last() ]
[ count( $b[. >= current() and
. < current()/following-sibling::T[1]]) > 0]"/>
</xsl:template>
<xsl:template match="T">
<xsl:value-of select="."/>
<xsl:text> </xsl:text>
</xsl:template>
</xsl:transform>
Michael Ludwig
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--