|
Subject: Re: [xsl] Split table row on paragraphs From: "kevinbrianbird@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Tue, 30 Oct 2018 17:53:00 -0000 |
Dear Martin,
Thanks for the prompt reply and solution!
--
Kevin
-----Original Message-----
From: Martin Honnen martin.honnen@xxxxxx
<xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Sent: 30 October 2018 17:09
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Subject: Re: [xsl] Split table row on paragraphs
On 30.10.2018 17:46, kevinbrianbird@xxxxxxxxx wrote:
> I have tables with arbitrary columns and each cell can have an
> arbitrary number of paragraphs. I want to split rows on paragraphs, so
> each row only contains one <p> element.
>
> Simplified input:
>
> <table>
>
> <tr>
>
> <td>
>
> <p>Para 1</p>
>
> </td>
>
> <td>
>
> <p>Para 1</p>
>
> <p>Para 2</p>
>
> <p>Para 3</p>
>
> </td>
>
> <td>
>
> <p>Para 1</p>
>
> <p>Para 2</p>
>
> </td>
>
> </tr>
>
> </table>
>
> Desired output:
>
> <table>
>
> <tr>
>
> <td>
>
> <p>Para 1</p>
>
> </td>
>
> <td>
>
> <p>Para 1</p>
>
> </td>
>
> <td>
>
> <p>Para 1</p>
>
> </td>
>
> </tr>
>
> <tr>
>
> <td>
>
> </td>
>
> <td>
>
> <p>Para 2</p>
>
> </td>
>
> <td>
>
> <p>Para 2</p>
>
> </td>
>
> </tr>
>
> <tr>
>
> <td>
>
> </td>
>
> <td>
>
> <p>Para 3</p>
>
> </td>
>
> <td>
>
> </td>
>
> </tr>
>
> </table>
>
> I am after suggestions as to the best way of tackling such a problem.
Assuming at least XSLT 2 and that the "td" elements only "p" elements I
think you can simply process each "tr" element
1 to max(td/count(p))
times with e.g.
<xsl:template match="tr">
<xsl:variable name="this-row" select="."/>
<xsl:for-each select="1 to max(td/count(p))">
<tr>
<xsl:apply-templates select="$this-row/*">
<xsl:with-param name="pos" select="."/>
</xsl:apply-templates>
</tr>
</xsl:for-each>
</xsl:template>
<xsl:template match="td">
<xsl:param name="pos"/>
<xsl:copy>
<xsl:apply-templates select="p[$pos]"/>
</xsl:copy>
</xsl:template>
Online sample using XSLT 3 (but only for setting up the identity
transformation with xsl:mode) is at
https://xsltfiddle.liberty-development.net/6qVRKx7.
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [xsl] Split table row on paragr, Martin Honnen martin | Thread | Re: [xsl] Split table row on paragr, Liam R. E. Quin liam |
| Re: [xsl] Split table row on paragr, Martin Honnen martin | Date | Re: [xsl] Split table row on paragr, Liam R. E. Quin liam |
| Month |