XSLT变量不起作用

时间:2018-04-03 09:34:18

标签: html xml xslt

我有这点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中的字符。

希望有人可以提供帮助!

1 个答案:

答案 0 :(得分:1)

似乎读取日期部分是可以的(实际上,几乎可以, 详情见下文)。

我向doctype-public命令添加了doctype-systemxsl: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源不包含它,所以最后一个 输出的单元格为空。