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 的 -- 字符。

希望有人能帮忙!

瓦尔迪博

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

命令添加了doctype-publicdoctype-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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章