通过XSL在HTML表中添加换行符

时间:2012-06-11 18:44:52

标签: html xml xslt html-table line-breaks

我通过XSL将XML文件转换为HTML。 在我的html表中,我有一个列,我需要将单元格的内容分解为我的一个xml元素标记中每个条目的新行。

我不确定如何为此设置xml文件。 这是我为html文件考虑的输出:

<info>
line1<br/>
line2<br/>
line3<br/>
line4
</info>

以及xsl-part上对我不起作用的内容:

    <td>
    <xsl:for-each select="info">
    <xsl:value-of select="." /> <br/>
    </xsl:for-each>
    </td>

我尝试用<ul><li>包装xml中的行,但这不起作用。我认为这是我遇到错误的xsl-part。如果我在value-of语句之后添加<br/>,它将输出所有内容,然后添加<br/>,但我当然希望每个条目都有<br/>

我希望你能告诉我如何正确设置它的方法。

2 个答案:

答案 0 :(得分:4)

此转化

<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes"/>
 <xsl:strip-space elements="*"/>

 <xsl:template match="info/*[position() > 1]">
  <br /><xsl:text>&#xA;</xsl:text>
  <xsl:value-of select="."/>
 </xsl:template>
</xsl:stylesheet>

应用于以下XML文档(因为问题中未提供源XML文档):

<info>
  <t>line1</t>
  <t>line2</t>
  <t>line3</t>
  <t>line4</t>
  <t>line5</t>
</info>

生成想要的结果(故意不生成<info>,因为这不是HTML元素):

line1<br/>
line2<br/>
line3<br/>
line4<br/>
line5

注1 :经过验证,此转换完全可以生成上述所有XSLT 1.0和2.0处理器的结果:MSXML3,MSXML4,MSXML6,.NET XslCompiledTransform,.NET XslTransform,Saxon 6.5。 4,XML-SPY,Saxon 9.1.05,XQSharp,AltovaXML2011(XML-SPY for XSLT 2.0)。

注意2 :如果确实希望将结果包装在<info>元素中,只需添加此模板:

 <xsl:template match="info">
  <info>
   <xsl:text>&#xA;</xsl:text><xsl:apply-templates/><xsl:text>&#xA;</xsl:text>
  </info>
 </xsl:template>

答案 1 :(得分:0)

我建议你这样做。 xml输入文件包含类似

的结构
<info>
    <line>line1</line>
    <line>line2</line>
    <line>line3</line>
    <line>line4</line>
</info>

xslt包含以下内容:

<td>
    <xsl:for-each select="info/line">
        <xsl:value-of select="."/><br/>
    </xsl:for-each>
</td>

这将导致(使用的输出方法为html,这通常会导致结果文件中的br元素未被关闭):

<td>
    line1<br>
    line2<br>
    line3<br>
    line4<br>
</td>

如果您需要删除最终br,则必须添加更多xsl代码。