|
Subject: Re: [xsl] Creating new, distinct groups of ranges from an aggregation of individual ranges From: "Heiko Niemann kontakt@xxxxxxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Wed, 19 Nov 2014 01:20:10 -0000 |
Hi Gerrit,
since my first name is not very international I listen to a whole range of
names: from Heeeko to Hayoko. :)
Talking about ranges. I had the same question about 219, Michael clarified
and since your code covers it already I would suggest Michael to follow
your approach. They are similar anyhow.
I noticed two things though:
1) parsing the ranges does not cover missing leading zeros (if you e.g.
add 8880889 to a aircraft-range it won't show in the result, 08880889
will); first I also looked at using analyze-string but dropped it so I use
following code now (adjusted to the elements you use):
<xsl:for-each select="tokenize(., '\s+')">
<xsl:if test=". castable as xs:integer">
<xsl:variable as="xs:string" name="rng">
<xsl:choose>
<xsl:when test="string-length(.) le 4">
<xsl:variable name="d4" select="format-number(number(.), '0000')"/>
<xsl:value-of select="concat($d4,$d4)"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="format-number(number(.), '00000000')"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<range start="{number(substring($rng,1,4))}"
end="{number(substring($rng,5,4))}"/>
</xsl:if>
</xsl:for-each>
There probably are better ways.
2) If you add e.g. 0200 to a list the result will show:
<pass3>
<range start="200" end="200"/>
<range start="200" end="200"/>
<range start="201" end="204"/>
and if you add 0201 instead the result is:
<pass3>
<range start="201" end="200"/>
<range start="201" end="201"/>
<range start="202" end="204"/>
Cheers,
Heiko
>
>
> On 18.11.2014 23:53, Michael Friedman sumarimike@xxxxxxxxxxx wrote:
>> Greetings,
>>
>> Note: My first reply email was too long and was rejected by the system.
>> I hope this one is shorter. I removed the output, but it can be
>> reproduced using the below.
>>
>> Wow - great suggestions and assistance. Heiko, your solution is very
>> promising and is one I started testing. To answer your question, the gap
>> you identified should be missing. These new ranges only show what SHOULD
>> be output in the final XSLFO, so the gaps need to be omitted. Great
>> catch.
>
> If I process your input, the difference between filling these gaps and
> not filling these gaps will be this:
>
> with gaps filled:
> b&
> <range start="218" end="218"/>
> <range start="219" end="219"/>
> <range start="220" end="222"/>
> b&
>
> without gaps filled:
> b&
> <range start="218" end="218"/>
> <range start="220" end="222"/>
> b&
>
> I think the 219 stems from input token 02010222.
> So Ibd think that it should be included, shouldnbt it?
>
> Ibm sorry that I am stubbornly pursuing my own code, but here it is:
>
> aircrafts.xsl
>
> <?xml version="1.0" encoding="UTF-8"?>
> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
> xmlns:xs="http://www.w3.org/2001/XMLSchema"
> exclude-result-prefixes="xs"
> version="2.0">
>
> <xsl:import href="ranges.xsl"/>
>
> <xsl:template match="group[aircraft-range]">
> <xsl:variable name="parse" as="element(ranges)">
> <ranges>
> <xsl:apply-templates mode="parse"/>
> </ranges>
> </xsl:variable>
> <xsl:apply-templates select="$parse"/>
> </xsl:template>
>
> <xsl:template match="aircraft-range" mode="parse">
> <xsl:for-each select="tokenize(., '\s+')">
> <xsl:analyze-string select="." regex="^(\d{{4}})(\d{{4}})?$">
> <xsl:matching-substring>
> <range start="{number(regex-group(1))}"
> end="{number((regex-group(2)[normalize-space()], regex-group(1))[1])}"/>
> </xsl:matching-substring>
> <xsl:non-matching-substring>
> <xsl:message select="'Could not parse ', ."/>
> </xsl:non-matching-substring>
> </xsl:analyze-string>
> </xsl:for-each>
> </xsl:template>
>
> </xsl:stylesheet>
>
>
> ranges.xsl is almost the same as what I posted recently, with
> <xsl:template match="/ranges">
> changed to
> <xsl:template match="ranges">
>
> Pass3 output:
>
> <pass3>
> <range start="201" end="204"/>
> <range start="205" end="205"/>
> <range start="206" end="207"/>
> <range start="208" end="210"/>
> <range start="211" end="212"/>
> <range start="213" end="213"/>
> <range start="214" end="217"/>
> <range start="218" end="218"/>
> <range start="219" end="219"/>
> <range start="220" end="222"/>
> <range start="225" end="226"/>
> <range start="228" end="228"/>
> <range start="232" end="232"/>
> <range start="235" end="235"/>
> <range start="236" end="238"/>
> <range start="239" end="239"/>
> <range start="240" end="240"/>
> <range start="251" end="252"/>
> <range start="257" end="261"/>
> <range start="262" end="263"/>
> <range start="264" end="266"/>
> <range start="267" end="269"/>
> <range start="270" end="285"/>
> <range start="286" end="287"/>
> <range start="290" end="290"/>
> <range start="292" end="292"/>
> <range start="296" end="296"/>
> <range start="401" end="405"/>
> <range start="408" end="408"/>
> <range start="411" end="411"/>
> <range start="415" end="416"/>
> <range start="451" end="452"/>
> <range start="453" end="453"/>
> <range start="454" end="455"/>
> <range start="456" end="460"/>
> </pass3>
>
> Gerrit
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [xsl] Creating new, distinct gr, Michael Friedman sum | Thread | Re: [xsl] Creating new, distinct gr, Imsieke, Gerrit, le- |
| Re: [xsl] Creating new, distinct gr, Michael Friedman sum | Date | [no subject], Unknown |
| Month |