xsl-list
[Top] [All Lists]

Re: [xsl] sequential numbering with for-each

2016-09-01 08:04:33
Thanks for the quick response.

However, this will not work for me since there can be any amount of
child nodes under tables.

What I need is a way of sequentially numbering the output for each foo1.

On Tue, Aug 30, 2016 at 4:40 PM, Heiko Niemann
kontakt(_at_)heiko-niemann(_dot_)de 
<xsl-list-service(_at_)lists(_dot_)mulberrytech(_dot_)com>
wrote:
You could save your strings (result) in a variable first and then do the
numbering in a second step (output):

<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:output method="text" encoding="UTF-8"/>
  <xsl:template match="/">

    <xsl:variable as="xs:string*" name="foos">
      <xsl:for-each select="1 to 5">
        <xsl:sequence select="concat('Data', .,' - ok')"/>
        <xsl:sequence select="concat('Data', .,' - not ok')"/>
      </xsl:for-each>
    </xsl:variable>

    <xsl:value-of separator="{codepoints-to-string(10)}">
      <xsl:for-each select="$foos">
        <xsl:sequence select="concat(position(), '. ', .)"/>
      </xsl:for-each>
    </xsl:value-of>

  </xsl:template>
</xsl:stylesheet>


Heiko


Hello:

I have a situation where I need to iterate over an element twice and
output sequential numbers.

I have two input files:

First XML file. foo occurrence is 1 to infinity

<root>

<foo type="f1">
<foo1>ok</foo1>
<foo1>not ok</foo1>
</foo>

</root>

Second XML file. tables can occur 1 to infinity. tab1 can also occur 1
to infinity.

<root1>

<table ttype="f1">

<tables>
<tab1>
Data1
</tab1>

<tab1>
Data2
</tab1>


</tables>
<tables>
<tab1>
......
</tab1>
<tab1>
Data3</tab1>
</tables>
</table>
</root1>

The logic is:

for each /root/foo[@type = @ttype from 'root1']/foo1

repeat tab1

Desired output:

1. Data1 - ok
2.Data1 - not ok
3.Data2 - ok
4.Data2 - not ok
5.Data3 -ok
6.Data3-not ok

I am able to get the individual 'tab1' elements to repeat. But my
sequential numbering label is off. If I use position() within for-each
it resets for every call in the for-each loop.

I get:

1. Data1 - ok
2.Data1 - not ok
1.Data2 - ok
2.Data2 - not ok
1.Data3 -ok
2.Data3-not ok


Any ideas or suggestions on how to make this work will be appreciated.




--~----------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
EasyUnsubscribe: http://lists.mulberrytech.com/unsub/xsl-list/1167547
or by email: xsl-list-unsub(_at_)lists(_dot_)mulberrytech(_dot_)com
--~--

<Prev in Thread] Current Thread [Next in Thread>