3

我通过 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>

我试过用 xml 包装这些行,<ul>但这<li>没有用。我认为这是我有错误的 xsl 部分。如果我<br/>在 value-of 语句之后放一个,它将输出所有内容,然后添加,<br/>但我当然想要<br/>每个条目。

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

4

2 回答 2

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(XSLT 2.0 的 XML-SPY)。

注意 2:如果您真的想将结果包装在一个<info>元素中,只需添加此模板:

 <xsl:template match="info">
  <info>
   <xsl:text>&#xA;</xsl:text><xsl:apply-templates/><xsl:text>&#xA;</xsl:text>
  </info>
 </xsl:template>
于 2012-06-12T02:58:44.450 回答
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 代码。

于 2012-06-11T20:56:56.330 回答