Home. 
.

transparent

transparent

transparent

Altova Mailing List Archives


Re: Node Grouping

From: "Yan Leshinsky" <yanl@------.---------.--->
To: NULL
Date: 6/1/2004 5:09:00 PM
If you want X to differ from execution to execution you shoud define it as a 
parameter inside of stylesheet:
<xsl:param name="count" select="3"/>
3 would be a default value of it.
Code is almost the same:
<xsl:for-each 
select="/Products/ProductsItem/Identifiers/Identifier[position() mod $count 
= 1]">
    <xsl:call-template name="Foo">
        <xsl:with-param name="Bar" select="(.|following::Identifier[$count > 
position()])/../.."/>
    </xsl:call-template>
</xsl:for-each>

If you want to have additional conditions you should put these additional 
predicates after Identifier:
<xsl:for-each 
select=/Products/ProductsItem/Identifiers/Identifier[Type='ECCN Nbr' or 
Type='PO Nbr'][position() mod $count = 1]">
    <xsl:call-template name="Foo">
        <xsl:with-param name="Bar" 
select="(.|following::Identifier[Type='ECCN Nbr' or Type='PO Nbr'][$count > 
position()])/../.."/>
    </xsl:call-template>
</xsl:for-each>

"Ben Schumacher" <bschumacher@i...> wrote in message 
news:OtMX3FCSEHA.2000@T......
> Thanks for the reply!  If you don't mind, I have another question ...
>
> Here is the exact XML structure that I am working with ...
>
> <Products>
>    <ProductsItem>
>        <Product>
>            <PacketData>
>                <Product>
>                    <ProductNbr>1</ProductNbr>
>                    <Description>1 Description</Description>
>                </Product>
>            </PacketData>
>        </Product>
>        <Identifiers>
>            <PacketData>
>                <Identifiers>
>                    <Identifier>
>                        <Type>ECCN Nbr</Type>
>                        <Value>ECCN-1</Value>
>                    </Identifier>
>                    <Identifier>
>                        <Type>PO Nbr</Type>
>                        <Value>PO-1</Value>
>                    </Identifier>
>                    <Identifier>
>                        <Type>SE Nbr</Type>
>                        <Value>SE-1</Value>
>                    </Identifier>
>                </Identifiers>
>            </PacketData>
>        </Identifiers>
>    </ProductsItem>
>    <ProductsItem>
>        <Product>
>            <PacketData>
>                <Product>
>                    <ProductNbr>2</ProductNbr>
>                    <Description>2 Description</Description>
>                </Product>
>            </PacketData>
>        </Product>
>        <Identifiers>
>            <PacketData>
>                <Identifiers>
>                    <Identifier>
>                        <Type>ECCN Nbr</Type>
>                        <Value>ECCN-2</Value>
>                    </Identifier>
>                    <Identifier>
>                        <Type>PO Nbr</Type>
>                        <Value>PO-2</Value>
>                    </Identifier>
>                </Identifiers>
>            </PacketData>
>        </Identifiers>
>    </ProductsItem>
> </Products>
>
> Because this is only a snippet of the actual XML structure, please keep in
> mind that there can be many more repeating 'ProductsItem' nodes along with
> many more repeating child 'Identifier' nodes under each 'ProductsItem' 
> node.
>
> I'm wodering how I can call a template that passes a group of 
> 'ProductsItem'
> nodes as a parameter.  The group of 'ProductsItem' nodes being passed as a
> parameter cannot have a count of child 'Identifier' nodes exceeding X. 
> For
> example, if the count that cannot be exceed is equal to 3, I want the 
> first
> template call to pass the first 'ProductsItem' node as the parameter group
> (this is because the first 'ProductsItem' node has 3 child 'Identifier'
> nodes.  Because I cannot exceed a maximum 3 Identifier nodes per each
> call-template instruction, I would still only want to pass the first
> 'ProductsItem' node if the count of its child 'Identifier' nodes was only 
> 2.
> Passing both 'ProductsItem' nodes would exceed a maximum count of 3
> Identifiers per call-template instruction.).  Then, on the second template
> call the parameter would contain the second 'ProductsItem' node with two
> remaining child 'Identifier' nodes.  Another example would be to set the
> maximum number of 'Identifier' nodes per template call to say 10.  In this
> case, my first and only template call would pass both 'ProductsItem' node
> becuase the combined count of the 'Identifier' nodes is only 5.
>
> I guess what I'm having trouble using the code snippet you provided above
> because I don't know how to pass the first few 'ProductsItem' nodes in one
> template call.  Then, pick up where that last template call left off 
> passing
> the next few 'ProductsItem' nodes as a parameter.  Also, it would be nice 
> to
> qualify the count of 'Identifier' nodes by their corresponding child 
> 'Type'
> node value.  For example, I only want to include in my count
> Identifier[Type='ECCN Nbr' or Type='PO Nbr'].
>
> Thanks so much in advance for any help you can give me ...  I'm definetly
> having some trouble here.
>
> Ben
>
>
>
> "Yan Leshinsky" <yanl@o...> wrote in message
> news:uy%23FlMaREHA.132@T......
>> <xsl:for-each
>> select="/Products/ProductsItem/Identifiers/Identifier[position() mod 3 =
>> 1]">
>>     <xsl:call-template name="Foo">
>>         <xsl:with-param name="Bar" select="(.|following::Identifier[3 >
>> position()])/../.."/>
>>     </xsl:call-template>
>> </xsl:for-each>
>>
>> "Ben Schumacher" <bschumacher@i...> wrote in message
>> news:umi2jwOREHA.3348@T......
>> > Looking at the XML below ...
>> >
>> > <Products>
>> >    <ProductsItem>
>> >        <Identifiers>
>> >            <Identifier>
>> >                <Type>ECCN Nbr</Type>
>> >                <Value>12345</Value>
>> >            </Identifier>
>> >            <Identifier>
>> >                <Type>ECCN Nbr</Type>
>> >                <Value>54321</Value>
>> >            </Identifier>
>> >        </Identifiers>
>> >    </ProductsItem>
>> >    <ProductsItem>
>> >        <Identifiers>
>> >            <Identifier>
>> >                <Type>ECCN Nbr</Type>
>> >                <Value>13245</Value>
>> >            </Identifier>
>> >        </Identifiers>
>> >    </ProductsItem>
>> >    <ProductsItem>
>> >        <Identifiers>
>> >            <Identifier>
>> >                <Type>ECCN Nbr</Type>
>> >                <Value>13245</Value>
>> >            </Identifier>
>> >            <Identifier>
>> >                <Type>ECCN Nbr</Type>
>> >                <Value>14235</Value>
>> >            </Identifier>
>> >            <Identifier>
>> >                <Type>ECCN Nbr</Type>
>> >                <Value>15234</Value>
>> >            </Identifier>
>> >        </Identifiers>
>> >    </ProductsItem>
>> > </Products>
>> >
>> > I'm trying to call a template and pass a parameter equal to a group of
>> > ProductsItem nodes where the count of the combined Identifier child
> nodes
>> > under each ProductsItem node exceeds no more than a count of three. 
>> > For
>> > example, the first matching template call would contain a parameter
>> > holding
>> > the first two ProductsItem nodes because the combined count of the
>> > Identifier nodes under these two ProductsItem nodes equals three.  The
>> > next
>> > call would contain the third positioned (and only the third positioned)
>> > ProductsItem node because that ProductsItem node also has a count of
> three
>> > child Identifier nodes.  Hope this makes sense ...  Any help is greatly
>> > appreciated!
>> >
>> > Ben
>> >
>> >
>>
>>
>
> 




transparent
Print
Mail
Like It
Disclaimer
.

These Archives are provided for informational purposes only and have been generated directly from the Altova mailing list archive system and are comprised of the lists set forth on www.altova.com/list/index.html. Therefore, Altova does not warrant or guarantee the accuracy, reliability, completeness, usefulness, non-infringement of intellectual property rights, or quality of any content on the Altova Mailing List Archive(s), regardless of who originates that content. You expressly understand and agree that you bear all risks associated with using or relying on that content. Altova will not be liable or responsible in any way for any content posted including, but not limited to, any errors or omissions in content, or for any losses or damage of any kind incurred as a result of the use of or reliance on any content. This disclaimer and limitation on liability is in addition to the disclaimers and limitations contained in the Website Terms of Use and elsewhere on the site.

.
.

transparent

transparent