2013-03-13 86 views
1

我們使用Tibco BusinessWorks將XML文檔傳遞給Tibco BusinessEvents進程。因爲BusinessEvents沒有DATE格式,只有DATETIME,我們必須在發送到BusinessEvents之前更改源XML文檔中的日期,並將響應的DateTime值映射回簡單的日期。靈活的XSL日期/日期時間轉換

這既煩人又麻煩。

爲了提高BusinessWorks的性能,我正在編寫一個樣式表來處理映射。這是我得到的。

<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:inf="http:/the.company.namespace"> 

<xsl:template match="node()"> 
    <xsl:copy> 
     <xsl:apply-templates select="node()" /> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="inf:PriorExpirationDate | inf:OrderDate | inf:SegmentEffectiveDate | 
        inf:SegmentExpirationDate | inf:CancelDate | inf:NewBusinessEffectiveDate | 
        inf:NewBusinessExpirationDate | inf:RenewalEffectiveDate | inf:RenewalExpirationDate | 
        inf:QuestionDate | inf:ViolationDate | inf:ConvictionDate | 
        inf:EffectiveDate | inf:RatingDate | inf:AdvanceDate | 
        inf:SIDRevisionDate | inf:DriverLicensedDate | 
        inf:ESignatureDate | inf:UploadDate | inf:CancelDate | 
        inf:CancelProcessedDate | inf:CancelEffectiveDate | inf:CreatedDate | 
        inf:QuoteCreationDate | inf:QuoteModifiedDate | inf:QuoteExpirationDate | 
        inf:RateStartDate | inf:RateEndDate | inf:ChangeEffectiveDate | inf:PostDate | 
        inf:EffectiveDate | inf:ExpirationDate | inf:BirthDate | 
        inf:InstallmentDueDate | inf:CommercialDriverLicenseDate "> 
    <xsl:element name="{name()}"> 
     <xsl:value-of 
      select="concat(format-date(text(),'[Y0001]-[M01]-[D01]'), 'T00:00:00')" /> 
    </xsl:element> 
</xsl:template> 

雖然功能性的,這並不理想。我寧願不必枚舉每個我需要轉換的元素,我寧願指定一個需要轉換的類型。

(1) XSL是否提供此功能?

(2)另外,還有一些元素名稱可能是一個位置的DATE和其他元素的DATETIME。如果我通過名稱知道父項,是否有排除某些DATETIME元素的有效方法?

(3)最後,有沒有人看到超出問題範圍的增強空間?

一些上下文:原始映射是在BusinessWorks的編輯器中完成的,其中GUI生成它自己的映射文件,幾百行系列的if/then/else語句。對於一個50k文件(我們的平均值),這個數量相當於每次轉換的接近20ms的開銷,這個Web服務在不到50ms的時間內完成了它的實際工作。這是必須改進的瓶頸。

回答

2

只需使用

<xsl:template match="*[. castable as xs:date]"> 
<!-- Your code here --> 
</xsl:template> 
+0

所以非常簡單,正是我需要的。謝謝! – JHarnach 2013-03-14 13:49:29

+0

@JHarnach,不客氣。是的,XSLT既強大又優雅。觀看XSLT 3.0可以想象得到的新功能。 – 2013-03-14 14:36:50