我通过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/>
。
我希望你能告诉我如何正确设置它的方法。
答案 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>
</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>
</xsl:text><xsl:apply-templates/><xsl:text>
</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代码。