【问题标题】:Add a linebreak in an HTML table via XSL通过 XSL 在 HTML 表格中添加换行符
【发布时间】:2012-06-14 16:38:01
【问题描述】:

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

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

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

在 xsl 部分中什么对我不起作用:

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

我尝试用&lt;ul&gt;&lt;li&gt; 将xml 中的行包装起来,但这没有用。我认为这是我有错误的 xsl 部分。如果我在 value-of 语句之后添加 &lt;br/&gt;,它将输出所有内容,然后添加 &lt;br/&gt;,但我当然希望每个条目都使用 &lt;br/&gt;

希望您能告诉我如何正确设置它。

【问题讨论】:

  • 为什么不把每一个都包装在一个

    中?
  • XML 文件的结构是什么?具体来说,info 元素是否包含子元素,还是什么?你描述的“输出”包含&lt;info&gt;标签,不是HTML。因此,请指定 XML 数据的格式和所需的输出格式。

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


【解决方案1】:

这种转变

<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>

产生想要的结果&lt;info&gt; 故意不产生,因为这不是 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(XSLT 2.0 的 XML-SPY)。

注意 2:如果您真的希望将结果包装在 &lt;info&gt; 元素中,只需添加此模板:

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

【讨论】:

    【解决方案2】:

    我建议你这样做。 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 代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-09
      • 1970-01-01
      • 1970-01-01
      • 2021-07-28
      • 2018-11-23
      • 1970-01-01
      • 2017-03-01
      • 1970-01-01
      相关资源
      最近更新 更多