Sorting XSLT在单个输出中连接来自多个节点的输入
我正在尝试进行一种转换,将几个航班的起飞和到达的输入处理为一个航班完整路线的输出 输入如下:Sorting XSLT在单个输出中连接来自多个节点的输入,sorting,xslt,concatenation,Sorting,Xslt,Concatenation,我正在尝试进行一种转换,将几个航班的起飞和到达的输入处理为一个航班完整路线的输出 输入如下: <FlightTrip> <flights> <departureAirport> <airportCode>LocB</airportCode> </departureAirport> <departureTime>2013-03-28T10:00:00.00
<FlightTrip>
<flights>
<departureAirport>
<airportCode>LocB</airportCode>
</departureAirport>
<departureTime>2013-03-28T10:00:00.000</departureTime>
<arrivalAirport>
<airportCode>LocC</airportCode>
</arrivalAirport>
</flights>
<flights>
<departureAirport>
<airportCode>LocA</airportCode>
</departureAirport>
<departureTime>2013-03-27T15:00:00.000</departureTime>
<arrivalAirport>
<airportCode>LocB</airportCode>
</arrivalAirport>
</flights>
<flights>
<departureAirport>
<airportCode>LocC</airportCode>
</departureAirport>
<departureTime>2013-03-30T14:00:00.000</departureTime>
<arrivalAirport>
<airportCode>LocD</airportCode>
</arrivalAirport>
</flights>
</FlightTrip>
LocB
2013-03-28 10:00:00.000
LocC
失水事故
2013-03-27T15:00:00.000
LocB
LocC
2013-03-30T14:00:00.000
LocD
所需的输出如下:
<FullTrip>LocA LocB LocC LocD</FullTrip>
LocA LocB LocC LocD
我曾尝试在输出变量中使用foreach,但无法正确使用它。我还需要根据起飞日期对输入进行排序,因为航班的顺序可能不同(根据示例输入)
有什么办法可以做到这一点吗
非常感谢
布鲁诺
将产生:
<FullTrip>LocA LocB LocC LocD</FullTrip>
LocA LocB LocC LocD
感谢乔皮的启蒙。为了让它在我的环境中工作,我不得不对其进行一些修改,最终使用foreach,如下所示:
<xsl:template match="/">
<xsl:variable name="locations">
<xsl:for-each select="/FlightTrip/flights">
<xsl:sort select="departureTime" order="ascending" data-type="text"/>
<xsl:value-of select="concat(departureAirport/airportCode,' - ')"/>
<xsl:if test="position() = last()">
<xsl:value-of select="arrivalAirport/airportCode"/>
</xsl:if>
</xsl:for-each>
</xsl:variable>
<FullTrip>
<xsl:value-of select="$locations"/>
</FullTrip>
</xsl:template>
应用于示例时,会产生以下输出:
<FullTrip>LocA - LocB - LocC - LocD</FullTrip>
LocA-LocB-LocC-LocD
再次感谢 谢谢你,乔皮。不过,在我的案例中,解决方案没有运行;我正在使用Oracle BPM,它说我只能使用或
<FullTrip>LocA - LocB - LocC - LocD</FullTrip>