xslt Please Help

admin

Administrator
Staff member
My xml:

<table-wrapper>
<table>
<tgroup cols="5">
<tbody>
<row>
<entry>1</entry>
<entry>2</entry>
<entry morerows="4">3 </entry>
<entry>4</entry>
<entry>5</entry>
</row>
<row>
<entry>1</entry>
<entry>2</entry>
<entry>3</entry>
<entry>4</entry>
<entry>5</entry>
</row>
<row>
<entry>1</entry>
<entry>2</entry>
<entry>3</entry>
<entry>4</entry>
<entry>5</entry>
</row>
<row>
<entry morerows="2">1</entry>
<entry>2</entry>
<entry>3</entry>
<entry>4</entry>
<entry>5</entry>
</row>
<row>
<entry>1</entry>
<entry>2</entry>
<entry>3</entry>
<entry>4</entry>
<entry>5</entry>
</row>
<row>
<entry morerows="1">1</entry>
<entry>2</entry>
<entry>3</entry>
<entry>4</entry>
<entry>5</entry>
</row>
<row>
<entry>1</entry>
<entry>2</entry>
<entry>3</entry>
<entry>4</entry>
<entry>5</entry>
</row>
<row>
<entry>1</entry>
<entry>2</entry>
<entry>3</entry>
<entry>4</entry>
<entry>5</entry>
</row>
</tbody>
</tgroup>
</table>
</table-wrapper>

I WANT TO TRANSFORM TO THIS:


<table>
<row>
<entry>1</entry>
<entry>2</entry>
<entry ><start/>3</entry>
<entry>4</entry>
<entry>5</entry>
</row>
<row>
<entry>1</entry>
<entry>2</entry>
<entry>3</entry>
<entry>4</entry>
<entry>5</entry>
</row>
<row>
<entry>1</entry>
<entry>2</entry>
<entry>3</entry>
<entry>4</entry>
<entry>5</entry>
</row>
<row>
<entry>1</entry>
<entry>2</entry>
<entry>3</entry>
<entry>4</entry>
<entry>5</entry>
</row>
<row>
<entry>1</entry>
<entry>2</entry>
<entry></end>3</entry>
<entry>4</entry>
<entry>5</entry>
</row>
<row>


Instead of an attribute value (@morerows="4") indicating how many rows following. Instead a <start> element will be where the @morerows is and the <end> element is created in the fourth row after the row with entry/@morerows at the entry position of @morerows.

So the first row has an entry/@morerows in the third (entry) position with a value of "4".
I need to create the <end> element in the 4th row after the row with the @morerows="4" as a child of the <entry> in the third position.


The xslt I've written is not right. It grabs the values I am looknig for but I need to grab the values then compare them to the location of the current row row/entry...

MY XSLT:

<xsl:template match="table/tgroup/tbody">

<xsl:param name="checkAll">
<xsl:choose>
<xsl:when test=".[row/entry/@morerows]">
<xsl:for-each select="./row">
<!--R <xsl:value-of select="position()"/>-->
<xsl:variable name="row"><xsl:choose>
<xsl:when test=".[entry/@morerows]">
<xsl:value-of select="position()"></xsl:value-of></xsl:when>
<!--<xsl:otherwise>F-</xsl:otherwise>-->
</xsl:choose></xsl:variable>
<xsl:for-each select="./entry">
<!--E<xsl:value-of select="position()"/>-->
<xsl:variable name="entry">
<xsl:choose>
<xsl:when test="./@morerows"><xsl:value-of select="position()"></xsl:value-of></xsl:when>
<!--<xsl:otherwise>F-</xsl:otherwise>-->
</xsl:choose></xsl:variable>

<xsl:if test="$row and ./@morerows">
Row Position: <xsl:value-of select="$row"/>
Entry Position: <xsl:value-of select="$entry"/>
Entry Attribute: <xsl:value-of select="./@morerows"/>
Add new attribute to Row: <xsl:value-of select="number($row) + ./@morerows"/> Cell Position: <xsl:value-of select="$entry"/>
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
</xsl:if>
</xsl:for-each>
</xsl:for-each>
</xsl:when>
</xsl:choose>
</xsl:param>
 
Back
Top