拥有以下输入
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>
示例输出:
<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部分
1)带有时间段的日期列表 2)阻止日期列表
与被阻止日期相关的时段必须根据下面的日期进行过滤。
尝试了多种方法,但似乎都没有效果。
在上面显示的示例中,2017年4月24日和27日显示为阻止日期,在输出中不应该有任何节点&#34; xsdLocal:GetShippingTimeSlotsRes&#34;其周期与这些日期相匹配
请帮忙吗?
答案 0 :(得分:1)
您没有指定XSLT版本,因此我使用的是2.0版。
整个事情归结为创建匹配的模板 &#34;禁止&#34;中 的项目(时间段)列表和 与他们无关。
将输出剩余时间段(和其他内容) 身份模板。
如何创建此模板:
XML中的一个奇怪点是你的root 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>