我有一点 XML
<MODULO>
<NAME>ObtemSumarioSNC_P</NAME>
<VALUES>
<ROW>
<DataEscritura>19770324</DataEscritura>
<DataUltimoBalanco>20161231</DataUltimoBalanco>
<TotalVendas>**********</TotalVendas>
</ROW>
</VALUES>
</MODULO>
我需要做的是使用<DataEscritura>
和<DataUltimoBalanco>
以日-月-年格式形成日期。
为此我做了这个 XSLT
<xsl:template match="MODULO[NAME='ObtemSumarioSNC_P']" name="Tmp_Sumario">
<table class="TabelaSumario">
<th colspan="2">SUMÁRIO</th>
<xsl:for-each select="VALUES/ROW">
<xsl:variable name="yyyy" select ="substring(DataEscritura,1,4)"/>
<xsl:variable name="mm" select="substring(DataEscritura,5,2)"/>
<xsl:variable name="dd" select="substring(DataEscritura,7,4)"/>
<xsl:variable name="yyyy2" select ="substring(DataUltimoBalanco,1,4)"/>
<xsl:variable name="mm2" select="substring(DataUltimoBalanco,5,2)"/>
<xsl:variable name="dd2" select="substring(DataUltimoBalanco,7,4)"/>
<tr>
<td>
Fundação
</td>
<td>
<xsl:value-of select="concat($dd,'-',$mm,'-',$yyyy)"/>
</td>
</tr>
<tr>
<td>
Vendas em <xsl:value-of select="concat($dd2,'-',$mm2,'-',$yyyy2)"/>
</td>
<td>
<xsl:value-of select="TotalVendas"/>
</td>
</tr>
<tr>
<td>
Capital Próprio em <xsl:value-of select="concat($dd2,'-',$mm2,'-',$yyyy2)"/>
</td>
<td>
<xsl:value-of select="CapitalProprio"/>
</td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
请注意,我已经将一个大的 XML 文件(同一个有这个,但这只是一小部分,原始文件大约有 5000 行)转换为带有多个电子表格和这段代码的 Excel 格式,我的意思是声明和使用变量,工作 100% 正常,现在我尝试在 HTML 中执行此操作,并且由和其他选择显示的值只是来自 concat 的 -- 字符。
希望有人能帮忙!
看起来日期部分的读取是可以的(实际上,几乎可以,详情见下文)。
我向命令添加了doctype-public
和doctype-system
属性xsl:output
,以及 XHTML 的示例值。您可以根据需要更改它们。
我还添加了一些 HTML 标签,即:
<html>
并<body>
围绕整个内容。<th>
围绕标题行 ( SUMÁRIO )。当您从源字符串中读取这两天的部分时,长度(第 3 个参数)应该是 2(而不是 4)。
所以更正的 XSLT 脚本是:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"
doctype-public="-//W3C//DTD XHTML 1.1//EN"
doctype-system= "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"/>
<xsl:template match="MODULO[NAME='ObtemSumarioSNC_P']" name="Tmp_Sumario">
<html><body>
<table class="TabelaSumario" border="1" cellspacing="2">
<tr><th colspan="2">SUMÁRIO</th></tr>
<xsl:for-each select="VALUES/ROW">
<xsl:variable name="yyyy" select ="substring(DataEscritura,1,4)"/>
<xsl:variable name="mm" select="substring(DataEscritura,5,2)"/>
<xsl:variable name="dd" select="substring(DataEscritura,7,2)"/>
<xsl:variable name="yyyy2" select ="substring(DataUltimoBalanco,1,4)"/>
<xsl:variable name="mm2" select="substring(DataUltimoBalanco,5,2)"/>
<xsl:variable name="dd2" select="substring(DataUltimoBalanco,7,2)"/>
<tr>
<td>Fundação</td>
<td><xsl:value-of select="concat($dd,'-',$mm,'-',$yyyy)"/></td>
</tr>
<tr>
<td>Vendas em <xsl:value-of select="concat($dd2,'-',$mm2,'-',$yyyy2)"/></td>
<td><xsl:value-of select="TotalVendas"/></td>
</tr>
<tr>
<td>Capital Próprio em <xsl:value-of select="concat($dd2,'-',$mm2,'-',$yyyy2)"/></td>
<td><xsl:value-of select="CapitalProprio"/></td>
</tr>
</xsl:for-each>
</table>
</body></html>
</xsl:template>
</xsl:stylesheet>
使用上面的脚本和你的 XML,我得到:
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html>
<body>
<table class="TabelaSumario" border="1" cellspacing="2">
<tr>
<th colspan="2">SUMÁRIO</th>
</tr>
<tr>
<td>Fundação</td>
<td>24-03-1977</td>
</tr>
<tr>
<td>Vendas em 31-12-2016</td>
<td>**********</td>
</tr>
<tr>
<td>Capital Próprio em 31-12-2016</td>
<td></td>
</tr>
</table>
</body>
</html>
具有适当的 HTML 视图。所以至少就这两个日期而言,一切都很好。
另请注意,您的模板包含value-of
从 读取数据CapitalProprio
,但您的 XML 源不包含它,因此输出的最后一个单元格为空。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句