我有这点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中的字符。
希望有人可以提供帮助!
答案 0 :(得分:1)
似乎读取日期部分是可以的(实际上,几乎可以, 详情见下文)。
我向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源不包含它,所以最后一个
输出的单元格为空。