2017-04-17 76 views
1

有以下輸入過濾器阻止日期XSLT

Sample Input : 

<GetShippingTimeSlotsRes xmlns:xsdLocal="example.com/xml/ShippingTimeSlotsRes" xmlns="example.com/xml/ShippingTimeSlotsRes"> 
    <xsdLocal:GetShippingTimeSlotsRes> 
     <xsdLocal:Weekdate>04/24/2017</xsdLocal:Weekdate> 
     <xsdLocal:Weekday>1</xsdLocal:Weekday> 
     <xsdLocal:Category>2</xsdLocal:Category> 
     <xsdLocal:From>08:00</xsdLocal:From> 
     <xsdLocal:To>18:00</xsdLocal:To> 
     <xsdLocal:AvailabilityId>1</xsdLocal:AvailabilityId> 
     <xsdLocal:Sequence>2</xsdLocal:Sequence> 
    </xsdLocal:GetShippingTimeSlotsRes> 
    <xsdLocal:GetShippingTimeSlotsRes> 
     <xsdLocal:Weekdate>04/25/2017</xsdLocal:Weekdate> 
     <xsdLocal:Weekday>3</xsdLocal:Weekday> 
     <xsdLocal:Category>3</xsdLocal:Category> 
     <xsdLocal:From>13:00</xsdLocal:From> 
     <xsdLocal:To>18:00</xsdLocal:To> 
     <xsdLocal:AvailabilityId>1</xsdLocal:AvailabilityId> 
     <xsdLocal:Sequence>123</xsdLocal:Sequence> 
    </xsdLocal:GetShippingTimeSlotsRes> 
    <xsdLocal:GetShippingTimeSlotsRes> 
     <xsdLocal:Weekdate>04/26/2017</xsdLocal:Weekdate> 
     <xsdLocal:Weekday>3</xsdLocal:Weekday> 
     <xsdLocal:Category>3</xsdLocal:Category> 
     <xsdLocal:From>13:00</xsdLocal:From> 
     <xsdLocal:To>18:00</xsdLocal:To> 
     <xsdLocal:AvailabilityId>1</xsdLocal:AvailabilityId> 
     <xsdLocal:Sequence>123</xsdLocal:Sequence> 
    </xsdLocal:GetShippingTimeSlotsRes> 
    <xsdLocal:GetShippingTimeSlotsRes> 
     <xsdLocal:Weekdate>04/27/2017</xsdLocal:Weekdate> 
     <xsdLocal:Weekday>3</xsdLocal:Weekday> 
     <xsdLocal:Category>3</xsdLocal:Category> 
     <xsdLocal:From>13:00</xsdLocal:From> 
     <xsdLocal:To>18:00</xsdLocal:To> 
     <xsdLocal:AvailabilityId>1</xsdLocal:AvailabilityId> 
     <xsdLocal:Sequence>123</xsdLocal:Sequence> 
    </xsdLocal:GetShippingTimeSlotsRes> 
    <xsdLocal:GetShippingTimeSlotsRes> 
     <xsdLocal:Weekdate>04/28/2017</xsdLocal:Weekdate> 
     <xsdLocal:Weekday>3</xsdLocal:Weekday> 
     <xsdLocal:Category>6</xsdLocal:Category> 
     <xsdLocal:From>18:00</xsdLocal:From> 
     <xsdLocal:To>22:00</xsdLocal:To> 
     <xsdLocal:AvailabilityId>1</xsdLocal:AvailabilityId> 
     <xsdLocal:Sequence>123</xsdLocal:Sequence> 
    </xsdLocal:GetShippingTimeSlotsRes> 
    <xsdLocal:BlockedDates> 
     <xsdLocal:Date>04/24/2017</xsdLocal:Date> 
    </xsdLocal:BlockedDates> 
    <xsdLocal:BlockedDates> 
     <xsdLocal:Date>04/27/2017</xsdLocal:Date> 
    </xsdLocal:BlockedDates> 
</GetShippingTimeSlotsRes> 

樣本輸出:的2份

1)日期的列表

<GetShippingTimeSlotsRes xmlns:xsdLocal="example.com/xml/ShippingTimeSlotsRes" xmlns="example.com/xml/ShippingTimeSlotsRes"> 
    <xsdLocal:GetShippingTimeSlotsRes> 
     <xsdLocal:Weekdate>04/25/2017</xsdLocal:Weekdate> 
     <xsdLocal:Weekday>3</xsdLocal:Weekday> 
     <xsdLocal:Category>3</xsdLocal:Category> 
     <xsdLocal:From>13:00</xsdLocal:From> 
     <xsdLocal:To>18:00</xsdLocal:To> 
     <xsdLocal:AvailabilityId>1</xsdLocal:AvailabilityId> 
     <xsdLocal:Sequence>123</xsdLocal:Sequence> 
    </xsdLocal:GetShippingTimeSlotsRes> 
    <xsdLocal:GetShippingTimeSlotsRes> 
     <xsdLocal:Weekdate>04/26/2017</xsdLocal:Weekdate> 
     <xsdLocal:Weekday>3</xsdLocal:Weekday> 
     <xsdLocal:Category>3</xsdLocal:Category> 
     <xsdLocal:From>13:00</xsdLocal:From> 
     <xsdLocal:To>18:00</xsdLocal:To> 
     <xsdLocal:AvailabilityId>1</xsdLocal:AvailabilityId> 
     <xsdLocal:Sequence>123</xsdLocal:Sequence> 
    </xsdLocal:GetShippingTimeSlotsRes> 
    <xsdLocal:GetShippingTimeSlotsRes> 
     <xsdLocal:Weekdate>04/28/2017</xsdLocal:Weekdate> 
     <xsdLocal:Weekday>3</xsdLocal:Weekday> 
     <xsdLocal:Category>6</xsdLocal:Category> 
     <xsdLocal:From>18:00</xsdLocal:From> 
     <xsdLocal:To>22:00</xsdLocal:To> 
     <xsdLocal:AvailabilityId>1</xsdLocal:AvailabilityId> 
     <xsdLocal:Sequence>123</xsdLocal:Sequence> 
    </xsdLocal:GetShippingTimeSlotsRes> 
    <xsdLocal:BlockedDates> 
     <xsdLocal:Date>04/24/2017</xsdLocal:Date> 
    </xsdLocal:BlockedDates> 
    <xsdLocal:BlockedDates> 
     <xsdLocal:Date>04/27/2017</xsdLocal:Date> 
    </xsdLocal:BlockedDates> 
</GetShippingTimeSlotsRes> 

輸入包括與時隙 2)封鎖日期列表

與被阻止的日期相關的時隙必須根據以下日期進行過濾。

嘗試了多種方法,但似乎沒有工作。

在上述第24和2017年4月27日所示的例子中被示出爲封閉的日期,並在輸出有不應該是任何節點「xsdLocal:GetShippingTimeSlotsRes」其具有weekdate匹配到這些日期

任何幫助好嗎?

+0

** 1。**在這種情況下,「過濾器」究竟意味着什麼?請顯示給定示例的預期輸出。 ** 2。**「*嘗試了多種方法,但似乎沒有任何工作。」發佈您的最佳嘗試,以便我們能夠修復它,而不必從頭開始爲您編寫代碼。 –

+0

上面顯示的XML中存在阻止的日期列表,即04.24.2017,05/01/2017。此外還有一個重複節點GetShippingTimeSlotsRes,其中有一個名爲「WeekDate」的日期。作爲迴應的預期是,不應該有任何節點「GetShippingTimeSlotsRes」,其中一個阻止日期中包含「WeekDate」作爲日期。 –

回答

1

您沒有指定XSLT版本,所以我使用了2.0版本。

整個事情歸結爲創建相匹配 項目(時隙),這是在「禁止」列表和 什麼都不做與他們的模板。

其餘時間段(和其他內容)將通過 輸出身份模板。

如何創建這個模板:

  • 創建阻塞日期的鍵(開頭)。
  • 中選擇該屬性爲 「無所事事」模板。

在XML中一個奇怪的一點是,你的根GetShippingTimeSlotsRes標籤 具有相同的名稱作爲下屬GetShippingTimeSlotsRes標籤。

來指代下屬標籤而已,我包括GetShippingTimeSlotsRes 在比賽中兩次屬性。

下面你有一個工作解決方案,如你所見,很短。

<?xml version="1.0" encoding="UTF-8" ?> 
<xsl:transform version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:xsdLocal="example.com/xml/ShippingTimeSlotsRes" 
    xpath-default-namespace="example.com/xml/ShippingTimeSlotsRes"> 
    <xsl:output method="xml" encoding="UTF-8" indent="yes" /> 
    <xsl:strip-space elements="*"/> 
    <xsl:key name="dates" match="BlockedDates/Date" use="."/> 

    <xsl:template match="GetShippingTimeSlotsRes/GetShippingTimeSlotsRes[key('dates',Weekdate)]"/> 

    <xsl:template match="@*|node()"> 
    <xsl:copy><xsl:apply-templates select="@*|node()"/></xsl:copy> 
    </xsl:template> 
</xsl:transform> 
+0

謝謝,這是有效的。 –