我有一个正在呈现HTML页面的XSLT文件,我试图通过使用;
作为分隔符来拆分字符串,然后在每次EVEN中断时添加换行符。我在下面有我的代码,它似乎不起作用,不会出现换行符:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<td width="50%" nowrap="nowrap">
<xsl:call-template name="split-parent" />
</td>
....
<xsl:template match="STUDENT_DETAILS/PARENT" name ="split-parent">
<xsl:variable name="splitParentsVar">
<xsl:call-template name="add-line-breaks">
<xsl:with-param name="stringToBreak" select="STUDENT_DETAILS/PARENT"/>
<xsl:with-param name="isEven" select="0"/>
</xsl:call-template>
</xsl:variable>
<xsl:value-of select="$splitParentsVar"/>
</xsl:template>
<xsl:template name="add-line-breaks">
<xsl:param name="stringToBreak"/>
<xsl:param name ="isEven" />
<xsl:if test ="$isEven='1'">
<xsl:value-of select="concat($stringToBreak,'
')"/>
<xsl:if test="substring-after($stringToBreak,';')!=''">
<xsl:call-template name="add-line-breaks">
<xsl:with-param name="stringToBreak" select="substring-after($stringToBreak,';')"/>
<xsl:with-param name="isEven" select="0"/>
</xsl:call-template>
</xsl:if>
</xsl:if>
<xsl:if test="$isEven='0'">
<xsl:value-of select="$stringToBreak"/>
<xsl:if test="substring-after($stringToBreak,';')!=''">
<xsl:call-template name="add-line-breaks">
<xsl:with-param name="stringToBreak" select="substring-after($stringToBreak,';')"/>
<xsl:with-param name="isEven" select="1"/>
</xsl:call-template>
</xsl:if>
</xsl:if>
</xsl:template>
....
输入的一个例子是:
George Aaron; Susan Lee Aaron; Richard Elliot Aaron;艾伯特史密斯Carry Johnson
输出类似于:
George Aaron; Susan Lee Aaron;
Richard Elliot Aaron;艾伯特史密斯
Carry Johnson
输入XML看起来像这样:
<NewDataSet>
<REPORT_OPTIONS>
<RANK_RUN>12/04/2013</RANK_RUN>
<PRNT_WGHT_AVGE>False<PRNT_WGHT_RANK>
</REPORT_OPTIONS>
<STUDENT_DETAILS>
<STUD_PK>1590</STUD_PK>
<STUD_NAME>Robert SMith</STUD_NAME>
<PARENT>jubju Aaron; Susan Lee Aaron; Richard Elliot Aaron; Carl Smith</PARENT>
</STUDENT_DETAILS>
</NewDataSet>
我想修改<PARENT>
标记,以便每两位父母都有一个以HTML格式呈现的换行符(无论最好的方法是什么)。
答案 0 :(得分:1)
它是一个不完整的输入和输出XML。但主要问题是HTML和XHTML不遵守换行符。
XHTML中的这段代码:
<span>Hello
World
!</span>
将呈现为:
Hello World!
要在HTML中插入换行符,您需要输出<br/>
标记,以便在输出页面中输入换行符。
所以你需要改变这一行:
<xsl:value-of select="concat($stringToBreak,'
')"/>
到此:
<xsl:value-of select="$stringToBreak"/><br/>
答案 1 :(得分:1)
结转自:
hInserting line-break into XML so that it appears after XSL rendering in VB.NET
你(再次)让你很难帮助你,因为没有上下文 - 比如桌子从哪里开始。无论如何,尝试将这两个模板拟合到样式表中:
<xsl:template match="STUDENT_DETAILS/PARENT">
<td>
<xsl:call-template name="break_even">
<xsl:with-param name="string" select="."/>
<xsl:with-param name="delimiter" select="';'"/>
</xsl:call-template>
</td>
</xsl:template>
<xsl:template name="break_even">
<xsl:param name="string"/>
<xsl:param name="delimiter" select="','"/>
<xsl:choose>
<xsl:when test="
contains($string, $delimiter)
and
contains(substring-after($string, $delimiter), $delimiter)">
<xsl:value-of select="concat(
substring-before($string, $delimiter), $delimiter,
substring-before(substring-after($string, $delimiter), $delimiter), $delimiter)"/>
<br/>
<xsl:call-template name="break_even">
<xsl:with-param name="string" select="substring-after(substring-after($string, $delimiter),$delimiter)" />
<xsl:with-param name="delimiter" select="$delimiter" />
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$string"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>