无法使用XSL将值从两个标记复制到另一个XML

时间:2016-09-28 12:31:07

标签: xml xslt altova

  1. 这是我的输入数据。它还包含许多其他字段,但我删除了它们:

    <?xml version="1.0" encoding="UTF-8"?>
    <tables>
     <table>
      <row>
        <JOURNAL_DATE></JOURNAL_DATE>
        <TRANSACTION_DATE>2016-08-15T00:00:00-04:00</TRANSACTION_DATE>
        <TRANSACTION_TIME>11:52:18.005</TRANSACTION_TIME>
      </row>
    <table>
    </tables>
    
  2. 我想要一个像这样的输出,其中journal_date的日期值为transaction_date,时间为transaction_time:

    <JOURNAL_DATE>2016-08-15 11:52:18.005</JOURNAL_DATE>
    <TRANSACTION_DATE>2016-08-15T00:00:00-04:00</TRANSACTION_DATE>
    <TRANSACTION_TIME>11:52:18.005</TRANSACTION_TIME>
    
  3. 我正在使用以下XSL代码,我还需要做些什么更改?我是新手。

    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" encoding="UTF-8" indent="yes" omit-xml-declaration="yes" />
    <xsl:template match="node()|@*">
     <xsl:copy>
        <xsl:apply-templates select="node()|@*"/>
     </xsl:copy>
    </xsl:template>
    <!--Suryanshu For adding required date format -->
    
    <xsl:template match="JOURNAL_DATE">
    <xsl:copy>
      <xsl:call-template name="formatdate">
        <xsl:with-param name="datestr" select="."/>
      </xsl:call-template>
     </xsl:copy>
    </xsl:template>
    
    
    <xsl:template name="formatdate">
    <xsl:param name="datestr"/>
    <xsl:value-of select="substring($datestr,1,10)"/>
    </xsl:template>
    
    </xsl:stylesheet>
    
  4. 我还需要做些什么更改,以便在日记日期标记中添加交易时间。

1 个答案:

答案 0 :(得分:0)

要将正确的值传递到formatdate模板,您需要像这样引用交易日期......

<xsl:with-param name="datestr" select="../TRANSACTION_DATE"/>

其中,..选择父元素row

试试这个XSLT模板

<xsl:template match="JOURNAL_DATE">
<xsl:copy>
  <xsl:call-template name="formatdate">
    <xsl:with-param name="datestr" select="../TRANSACTION_DATE"/>
  </xsl:call-template>
  <xsl:text> </xsl:text>
  <xsl:value-of select="../TRANSACTION_TIME" />
 </xsl:copy>
</xsl:template>