以下是我的输入记录。如果有多个停止,则每个LoadNumber可以重复多次。我想转换以下内容:
<Load>
<LoadData>
<ShipmentNumber>24609038</ShipmentNumber>
<TrackingType>FK </TrackingType>
<LoadNumber>90621234</LoadNumber>
<StopSequence>1</StopSequence>
<CarrierNumber>22104</CarrierNumber>
<SCAC>WOLH</SCAC>
<ShippingName>Somewhere DC </ShippingName>
<ShippingAddress>115 S MAIN ST </ShippingAddress>
<ShippingCity>CLEVELAND </ShippingCity>
<ShippingState>OH </ShippingState>
<ShippingZip>54915 </ShippingZip>
<ShippingCountry>US </ShippingCountry>
<PromisedDate>116321</PromisedDate>
<PromisedTime>153000</PromisedTime>
<DestinationName>COMPANY1 </DestinationName>
<DestinationAddress>4000 3RD AVE N </DestinationAddress>
<DestinationCity>MINNEAPOLIS </DestinationCity>
<DestinationState>MN</DestinationState>
<DestinationZip>55443 </DestinationZip>
<DestinationCountry>US</DestinationCountry>
<ShippingDate>116320</ShippingDate>
<ShippingTime>230000</ShippingTime>
</LoadData>
<LoadData>
<ShipmentNumber>24615865</ShipmentNumber>
<TrackingType>FK </TrackingType>
<LoadNumber>90621234</LoadNumber>
<StopSequence>2</StopSequence>
<CarrierNumber>22104</CarrierNumber>
<SCAC>WOLH</SCAC>
<ShippingName>Somewhere DC </ShippingName>
<ShippingAddress>115 S MAIN ST </ShippingAddress>
<ShippingCity>CLEVELAND </ShippingCity>
<ShippingState>OH </ShippingState>
<ShippingZip>54912 </ShippingZip>
<ShippingCountry>US </ShippingCountry>
<PromisedDate>116321</PromisedDate>
<PromisedTime>133000</PromisedTime>
<DestinationName>COMPANY 2 </DestinationName>
<DestinationAddress>3 KENT ST </DestinationAddress>
<DestinationCity>SHOREVIEW </DestinationCity>
<DestinationState>MN</DestinationState>
<DestinationZip>55126 </DestinationZip>
<DestinationCountry>US</DestinationCountry>
<ShippingDate>116320</ShippingDate>
<ShippingTime>230000</ShippingTime>
</LoadData>
<LoadData>
<ShipmentNumber>24469114</ShipmentNumber>
<TrackingType>FK </TrackingType>
<LoadNumber>11325877</LoadNumber>
<StopSequence>1</StopSequence>
<CarrierNumber>22104</CarrierNumber>
<SCAC>WOLH</SCAC>
<ShippingName>Somewhere DC </ShippingName>
<ShippingAddress>115 S MAIN ST </ShippingAddress>
<ShippingCity>CLEVELAND </ShippingCity>
<ShippingState>OH </ShippingState>
<ShippingZip>54915 </ShippingZip>
<ShippingCountry>US </ShippingCountry>
<PromisedDate>116318</PromisedDate>
<PromisedTime>235900</PromisedTime>
<DestinationName>Test DC </DestinationName>
<DestinationAddress>450 DECLARATION DR </DestinationAddress>
<DestinationCity>MCDONOUGH </DestinationCity>
<DestinationState>GA</DestinationState>
<DestinationZip>30253 </DestinationZip>
<DestinationCountry>US</DestinationCountry>
<ShippingDate>116316</ShippingDate>
<ShippingTime>130000</ShippingTime>
</LoadData>
</Load>
进入这个:
<Loads>
<Load>
<Action>add</Action>
<BillOfLading<90621234</BillOfLading>
<Carrier>
<SCAC>WOLH</SCAC>
</Carrier>
<PickUpStops>
<PickUpStop>
<ActionPickup>add</ActionPickup>
<NamePickup>Somewhere DC</NamePickup>
<StopIdPickup>0</StopIdPickup>
<StopSequencePickup>0</StopSequencePickup>
<StreetAddressPickup>115 S MAIN ST</StreetAddressPickup>
<CityPickup>CLEVELAND</CityPickup>
<StatePickup>OH</StatePickup>
<PostalPickup>54915</PostalPickup>
<CountryPickup>US</CountryPickup>
<EarliestPlannedPickupTime>2016-11-15T23:00:00Z</EarliestPlannedPickupTime>
<LatestPlannedPickupTime>2016-11-15T23:00:00Z</LatestPlannedPickupTime>
</PickupStop>
</PickUpStops>
<DeliveryStops>
<DeliveryStop>
<ActionDelivery>add</ActionDelivery>
<NameDelivery>COMPANY1</NameDelivery>
<StopIdDelivery>1</StopIdDelivery>
<StopSequenceDelivery>1</StopSequenceDelivery>
<StreetAddressDelivery>4000 #RD AVE N</StreetAddressDelivery>
<CityDelivery>MINNEAPOLIS</CityDelivery>
<StateDelivery<MN</StateDelivery>
<PostalDelivery>55443</PostalDelivery>
<CountryDelivery>US</CountryDelivery>
<EarliestAppointmentTime>2016-11-16T15:30:00Z</EarliestAppointmentTime>
<LatestAppointmentTime>2016-11-16T15:30:00Z</LatestAppointmentTime>
</DeliveryStop>
<DeliveryStop>
<ActionDelivery>add</ActionDelivery>
<NameDelivery>COMPANY 2</NameDelivery>
<StopIdDelivery>2</StopIdDelivery>
<StopSequenceDelivery>2</StopSequenceDelivery>
<StreetAddressDelivery>3 KENT ST</StreetAddressDelivery>
<CityDelivery>SHOREVIEW</CityDelivery>
<StateDelivery<MN</StateDelivery>
<PostalDelivery>55126</PostalDelivery>
<CountryDelivery>US</CountryDelivery>
<EarliestAppointmentTime>2016-11-16T13:30:00Z</EarliestAppointmentTime>
<LatestAppointmentTime>2016-11-16T13:30:00Z</LatestAppointmentTime>
</DeliveryStop>
</DeliveryStops>
</Load>
<Load>
<Action>add</Action>
<BillOfLading<11325877</BillOfLading>
<Carrier>
<SCAC>WOLH</SCAC>
</Carrier>
<PickUpStops>
<PickUpStop>
<ActionPickup>add</ActionPickup>
<NamePickup>Somewhere DC</NamePickup>
<StopIdPickup>0</StopIdPickup>
<StopSequencePickup>0</StopSequencePickup>
<StreetAddressPickup>115 S MAIN ST</StreetAddressPickup>
<CityPickup>CLEVELAND</CityPickup>
<StatePickup>OH</StatePickup>
<PostalPickup>54915</PostalPickup>
<CountryPickup>US</CountryPickup>
<EarliestPlannedPickupTime>2016-11-11T13:00:00Z</EarliestPlannedPickupTime>
<LatestPlannedPickupTime>2016-11-11T13:00:00Z</LatestPlannedPickupTime>
</PickupStop>
</PickUpStops>
<DeliveryStops>
<DeliveryStop>
<ActionDelivery>add</ActionDelivery>
<NameDelivery>Test DC</NameDelivery>
<StopIdDelivery>1</StopIdDelivery>
<StopSequenceDelivery>1</StopSequenceDelivery>
<StreetAddressDelivery>450 DECLARATION DR</StreetAddressDelivery>
<CityDelivery>MCDONOUGH</CityDelivery>
<StateDelivery<GA</StateDelivery>
<PostalDelivery>30253</PostalDelivery>
<CountryDelivery>US</CountryDelivery>
<EarliestAppointmentTime>2016-11-13T23:59:00Z</EarliestAppointmentTime>
<LatestAppointmentTime>2016-11-13T23:59:00Z</LatestAppointmentTime>
</DeliveryStop>
</DeliveryStops>
</Load>
</Loads>`
我还必须找到一种方法将输入中的朱利安日期转换为我想要的输出格式。下面的XSLT就是我所知道的。我试图使用LoadNumber作为键,但我不确定如何使用此键将两个输入记录合并到一个带有两个停止的加载中,因此xslt不完整。谁能给我一些建议?感谢。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:key name="load" match="LoadData" use="LoadNumber"/>
<xsl:template match="/root">
<xsl:copy>
<xsl:apply-templates select="LoadData[generate-id(.) =
generate-id(key('load', LoadNumber))]"/>
</xsl:copy>
</xsl:template>
<xsl:template match="LoadData">
<Loads>
<Action>
<xsl:text>add</xsl:text>
<BillOfLading>
<xsl:value-of select = "LoadNumber"/>
</BillOfLading>
<Carrier>
<SCAC>
<xsl:value-of select = "SCAC"/>
</SCAC>
<PickUpStops>
<PickUpStop>
<ActionPickup>
<xsl:text>add</xsl:text>
<ActionPickup>
<NamePickup>
<xsl:value-of select = "ShippingName"/>
</NamePickup>
<StopIdPickup>
<xsl:text>0</xsl:text>
</StopIdPickup>
<StopSequencePickup>
<xsl:text>0</xsl:text>
</StopSequencePickup>
<StreetAddressPickup>
<xsl:value-of select = "ShippingAddress"/>
</StreetAddressPickup>
<CityPickup>
<xsl:value-of select = "ShippingCity"/>
</CityPickup>
<StatePickup>
<xsl:value-of select = "ShippingState"/>
</StatePickup>
<PostalPickup>
<xsl:value-of select = "ShippingZip"/>
</PostalPickup>
<CountryPickup>
<xsl:value-of select = "ShippingCountry"/>
</CountryPickup>
<EarliestPlannedPickupTime>
<xsl:value-of select = "concat(ShippingDate,'T',ShippingTime)"/>
</EarliestPlannedPickupTime>
<LatestPlannedPickupTime>
<xsl:value-of select = "concat(ShippingDate,'T',ShippingTime)"/>
</LatestPlannedPickupTime>
</PickupStop>
</PickupStops>
<DeliveryStop>
<ActionDelivery>
<xsl:text>add</xsl:text>
</ActionDelivery>
<NameDelivery>
<xsl:value-of select = "ShippingName"/>
</NameDelivery>
<StopIdDelivery>
<xsl:value-of select="key('load',LoadNumber)//Stop
</StopIdDelivery>
</Loads>
</xsl:template>
</xsl:stylesheet>
答案 0 :(得分:0)
我不确定如何使用此键将两个输入记录合并在一起 进入一个有两个停止的负载
您需要重复使用相同的密钥才能获取当前组中的记录。这是一个例子,为了清楚起见,减少了证明原则所需的最小值:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:key name="load" match="LoadData" use="LoadNumber"/>
<xsl:template match="/Load">
<Loads>
<xsl:apply-templates select="LoadData[generate-id() = generate-id(key('load', LoadNumber)[1])]" mode="pickup"/>
</Loads>
</xsl:template>
<xsl:template match="LoadData" mode="pickup">
<Load>
<!-- more here -->
<PickupStops>
<PickupStop>
<!-- more here -->
<CityPickup>
<xsl:value-of select="ShippingCity"/>
</CityPickup>
<!-- more here -->
</PickupStop>
</PickupStops>
<DeliveryStops>
<xsl:apply-templates select="key('load', LoadNumber)"/>
</DeliveryStops>
</Load>
</xsl:template>
<xsl:template match="LoadData">
<DeliveryStop>
<!-- more here -->
<CityPickup>
<xsl:value-of select="DestinationCity"/>
</CityPickup>
<!-- more here -->
</DeliveryStop>
</xsl:template>
</xsl:stylesheet>
应用于您的示例输入,结果将是:
<?xml version="1.0" encoding="UTF-8"?>
<Loads>
<Load>
<PickupStops>
<PickupStop>
<CityPickup>CLEVELAND </CityPickup>
</PickupStop>
</PickupStops>
<DeliveryStops>
<DeliveryStop>
<CityPickup>MINNEAPOLIS </CityPickup>
</DeliveryStop>
<DeliveryStop>
<CityPickup>SHOREVIEW </CityPickup>
</DeliveryStop>
</DeliveryStops>
</Load>
<Load>
<PickupStops>
<PickupStop>
<CityPickup>CLEVELAND </CityPickup>
</PickupStop>
</PickupStops>
<DeliveryStops>
<DeliveryStop>
<CityPickup>MCDONOUGH </CityPickup>
</DeliveryStop>
</DeliveryStops>
</Load>
</Loads>