如何在xslt

时间:2018-03-26 14:42:55

标签: java xml xslt saxon

如何在xslt中使用java并避免出现以下错误:

  

找不到名为1的参数函数   {的java:com.poc.XSDDateTimeFormatter} toXSD()。对Java的反身调用   Saxon-HE下没有方法,也找不到2个参数   功能命名   {瓮:JAVA:com.poc.NLDataUnitTestTimeCalc} computeTestTime()。自反   Saxon-HE

下无法调用Java方法
computeTestTime

NLDataUnitTestTimeCalc方法

public static long computeTestTime( String startDateStr, String endDateStr) {

  long testTime= 0;
  long longStartDate= 0;
  long longEndDate= 0; 

  for( String format: formats) {
     try {
        SimpleDateFormat formatter = new SimpleDateFormat(format);

        Date startdate = formatter.parse(startDateStr);
        Date enddate = formatter.parse(endDateStr);
        longStartDate=startdate.getTime();
        longEndDate=enddate.getTime();
        testTime = (Math.abs(longEndDate-longStartDate)/1000);
        break; 
     }
     catch (ParseException ex) {
        //ignore
     }
  }
  return testTime; 

}

toXSD method of XSDDateTimeFormatter class

public static String toXSD( String dateStr) {
  for( String format: formats) {
     try {
        Date date = new SimpleDateFormat( format).parse( dateStr);
        String xsd = new SimpleDateFormat( XSDdateTimeFormat).format( date);

        //special case for xsd:dateTime timezone format
        return 
                xsd.substring(0, xsd.length() - 2) + 
                ':' +
                xsd.substring(xsd.length() - 2);
     } catch (ParseException ex) {
        //ignore
     }
  }

  return dateStr;   }

XSLT

<xsl:template match="/Event">

        <bus:Timestamp> 
          <xsl:value-of                   xmlns:XSDDateTimeFormatter="java:com.amd.pde.integration.XSDDateTimeFormatter"
              select="XSDDateTimeFormatter:toXSD( //TimeStamp)"
           />   
        </bus:Timestamp>

示例xml

<Event>   
<Message>BEGINEXECUTION</Message>
<TimeStamp>20080111000419146</TimeStamp>
<EquipmentID>stack</EquipmentID>
</Event>

1 个答案:

答案 0 :(得分:3)

正如错误消息所示,您使用Saxon-HE,但Java中的扩展函数仅受Saxon-PE和Saxon-EE支持。 Saxon-Docs明确提到这一点。

我猜你有两个选择

  • 购买Saxon-PE或Saxon-EE
  • 在XSL中实现您的功能