Improve company productivity with a Business Account.Sign Up

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 503
  • Last Modified:

xsl template for converting string to xsl-fo table

Dear experts,

here is the story:
-from the database I get a simple string, which i just need to output to a table cell,
-but sometimes I get a string which has newlines (	 )and tab character (
) in it,
--whenever I get this kind of string, I'd like to output it in a table cell which would mimic the NL&TAB formatting

I wanted to mimic the formatting by the means of a table. I am able to convert newlines to <fo:table-rows> and recursively print it out, but now I am stuck with recursivelly creating table-cells.

The code bellow creates table with corresponding number of rows (each new line is new table row)

Can anyone help me with creating a full table?
<xsl:template name="format_string">
		<xsl:param name="niz"/>
		<fo:table>
			<fo:table-body>
				<xsl:call-template name="format_string2tablerows">
					<xsl:with-param name="niz" select="$niz" />
				</xsl:call-template>
			</fo:table-body>
		</fo:table>
	</xsl:template>

	<xsl:template name="format_string2tablerows">
		<xsl:param name="niz" />
		<xsl:choose>
			<xsl:when test="contains($niz,'&#10;')">
				<fo:table-row>
					<fo:table-cell>
						<fo:block><xsl:value-of select="substring-before($niz,'&#10;')" /></fo:block>
					</fo:table-cell>
				</fo:table-row>
				<xsl:call-template name="format_string2tablerows">
					<xsl:with-param name="niz" select="substring-after($niz,'&#10;')" />
				</xsl:call-template>
			</xsl:when>
			<xsl:otherwise>
				<fo:table-row>
					<fo:table-cell>
						<fo:block>			
							<xsl:call-template name="format_object">
								<xsl:with-param name="niz" select="$niz" />
							</xsl:call-template>
						</fo:block>
					</fo:table-cell>
				</fo:table-row>
			</xsl:otherwise>
		</xsl:choose>				
	</xsl:template>

Open in new window

0
zeldi
Asked:
zeldi
1 Solution
 
zeldiAuthor Commented:
Never mind, I've found a solution by myself.

<xsl:template name="format_string">
		<xsl:param name="niz"/>
		<fo:table>
			<fo:table-body>
				<xsl:call-template name="format_string2tablerows">
					<xsl:with-param name="niz" select="$niz" />
				</xsl:call-template>
			</fo:table-body>
		</fo:table>
	</xsl:template>
	<xsl:template name="format_string2tablerows">
		<xsl:param name="niz" />
		<xsl:choose>
			<xsl:when test="contains($niz,'&#10;')">
				<fo:table-row>
					<xsl:call-template name="format_string2tablecells">
						<xsl:with-param name="niz" select="substring-before($niz,'&#10;')" />
					</xsl:call-template>
				</fo:table-row>
				<xsl:call-template name="format_string2tablerows">
					<xsl:with-param name="niz" select="substring-after($niz,'&#10;')" />
				</xsl:call-template>
			</xsl:when>
			<xsl:otherwise>
				<fo:table-row>
					<xsl:call-template name="format_string2tablecells">
						<xsl:with-param name="niz" select="$niz" />
					</xsl:call-template>
				</fo:table-row>
			</xsl:otherwise>
		</xsl:choose>				
	</xsl:template>
	<xsl:template name="format_string2tablecells">
		<xsl:param name="niz" />
		<xsl:choose>
			<xsl:when test="contains($niz,'&#9;')">
				<fo:table-cell>
					<fo:block>
						<xsl:call-template name="format_object">
							<xsl:with-param name="niz" select="substring-before($niz,'&#9;')" />
						</xsl:call-template>					
					</fo:block>
				</fo:table-cell>
				<xsl:call-template name="format_string2tablecells">
					<xsl:with-param name="niz" select="substring-after($niz,'&#9;')" />
				</xsl:call-template>
			</xsl:when>
			<xsl:otherwise>
				<fo:table-cell>
					<fo:block>			
						<xsl:call-template name="format_object">
							<xsl:with-param name="niz" select="$niz" />
						</xsl:call-template>
					</fo:block>
				</fo:table-cell>
			</xsl:otherwise>
		</xsl:choose>				
	</xsl:template>

Open in new window

0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

What Kind of Coding Program is Right for You?

There are many ways to learn to code these days. From coding bootcamps like Flatiron School to online courses to totally free beginner resources. The best way to learn to code depends on many factors, but the most important one is you. See what course is best for you.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now