我正在与一个营销平台合作,以展示一个人为航班订购的包。作为整个旅程的一部分,一名乘客可以有多个航段。因此,如果我们有像下面这样的记录(每条记录也分配了一个唯一值,因为这在被拉出之前全部插入到数据库中,这里的 xml 是我正在使用的模型)。
编辑 8/9 - 下面的实际 XML 和修订的 XSLT。此外,如果您查看 Bag 部分中的此链接(http://f.spiritairlines.com/ats/msg.aspx?sg1=2e4a4d00cb00be84c598b618d6556e3e)。我希望它看起来像第二行(Pedro Smith)而不是第一行(Sandra Smith)。顺便说一句,这是所有测试数据,因此向您展示没有隐私问题,也没有任何私人信息。
<bookingcontact_to_booking>
<passenger_to_bookings>
<passenger_to_booking>
<Prop pk_id="4147" entity_id="126" val="SMITH" type_id="20" prop_name="lastname" prop_id="10208"/>
<Prop pk_id="4147" entity_id="126" val="PEDRO" type_id="20" prop_name="firstname" prop_id="10206"/>
<passseg_to_passengers>
<passseg_to_passenger>
<Prop pk_id="9432" entity_id="122" val="2013-08-27 17:45:00.000" type_id="30" prop_name="arrivaltime" prop_id="10216"/>
<Prop pk_id="9432" entity_id="122" val="188" type_id="20" prop_name="flightnumber" prop_id="10217"/>
<Prop pk_id="9432" entity_id="122" val="5" type_id="10" prop_name="checkedbagcount" prop_id="10220"/>
<Prop pk_id="9432" entity_id="122" val="1" type_id="10" prop_name="carryonbagcount" prop_id="10221"/>
<Prop pk_id="9432" entity_id="122" val="1" type_id="10" prop_name="journeynumber" prop_id="10222"/>
<Prop pk_id="9432" entity_id="122" val="0" type_id="10" prop_name="segmentnumber" prop_id="10223"/>
<Prop pk_id="9432" entity_id="122" val="2013-08-27 08:12:00.000" type_id="30" prop_name="departuretime" prop_id="10296"/>
<Prop pk_id="9432" entity_id="122" val="Las Vegas, NV" type_id="20" prop_name="departureairport" prop_id="10297"/>
<Prop pk_id="9432" entity_id="122" val="New York, NY - LaGuardia " type_id="20" prop_name="arrivalairport" prop_id="10298"/>
<Prop pk_id="9432" entity_id="122" val="10B,20B" type_id="20" prop_name="seatassignment" prop_id="10299"/>
</passseg_to_passenger>
<passseg_to_passenger>
<Prop pk_id="9433" entity_id="122" val="10B,20B" type_id="20" prop_name="seatassignment" prop_id="10299"/>
<Prop pk_id="9433" entity_id="122" val="Fort Lauderdale, FL" type_id="20" prop_name="arrivalairport" prop_id="10298"/>
<Prop pk_id="9433" entity_id="122" val="New York, NY - LaGuardia " type_id="20" prop_name="departureairport" prop_id="10297"/>
<Prop pk_id="9433" entity_id="122" val="2013-08-27 19:45:00.000" type_id="30" prop_name="departuretime" prop_id="10296"/>
<Prop pk_id="9433" entity_id="122" val="1" type_id="10" prop_name="segmentnumber" prop_id="10223"/>
<Prop pk_id="9433" entity_id="122" val="1" type_id="10" prop_name="journeynumber" prop_id="10222"/>
<Prop pk_id="9433" entity_id="122" val="1" type_id="10" prop_name="carryonbagcount" prop_id="10221"/>
<Prop pk_id="9433" entity_id="122" val="5" type_id="10" prop_name="checkedbagcount" prop_id="10220"/>
<Prop pk_id="9433" entity_id="122" val="779" type_id="20" prop_name="flightnumber" prop_id="10217"/>
<Prop pk_id="9433" entity_id="122" val="2013-08-27 22:45:00.000" type_id="30" prop_name="arrivaltime" prop_id="10216"/>
</passseg_to_passenger>
</passseg_to_passengers>
</passenger_to_booking>
</passenger_to_bookings>
</bookingcontact_to_booking>
我只想在每次旅程中显示 CarryOnBagCount 和 CheckedBagCount 一次。我尝试了几种不同的方法,但我认为我离解决方案越来越远。目前,无论旅程和航段如何,输出都是所有行李数量。XSLT 如下。
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="UTF-8" indent="yes" omit-xml-declaration="yes" />
<xsl:key name="journey" match="passengersegment" use="Prop[@prop_name = 'journeynumber']/@val"/>
<xsl:template match="/">
<xsl:for-each select="/Msg/Props/bookingcontact_to_booking/passenger_to_bookings/passenger_to_booking">
<tr>
<td colspan="3">
<table style="text-align: left; line-height: 18px; font-family: Arial, Helvetica, sans-serif; font-size: 12px; color:#333333;"
border="0" cellspacing="0" cellpadding="0" width="542" align="left">
<tbody>
<tr>
<td height="22" width="200">
<xsl:value-of select="Prop[@prop_name = 'firstname']/@val" /><xsl:text> </xsl:text><xsl:value-of select="Prop[@prop_name = 'lastname']/@val" />
</td>
<xsl:apply-templates select="passengersegment[generate-id() = generate-id(key('journey', journeynumber)[1])]"/>
</tr>
</tbody>
</table>
</td>
</tr>
</xsl:for-each>
</xsl:template>
<xsl:template match="passengersegment">
<td style="text-align: left;" width="100">
<table style="text-align: left; line-height: 18px; font-family: Arial, Helvetica, sans-serif; font-size: 12px; color:#333333;" width="100">
<tr>
<xsl:for-each select="passseg_to_passengers/passseg_to_passenger">
<td width="50">
<xsl:value-of select="Prop[@prop_name = 'carryonbagcount']/@val" />
</td>
</xsl:for-each>
</tr>
</table>
</td>
<td style="text-align: left;" width="100">
<table style="text-align: left; line-height: 18px; font-family: Arial, Helvetica, sans-serif; font-size: 12px; color:#333333;" width="100">
<tr>
<xsl:for-each select="passseg_to_passengers/passseg_to_passenger">
<td width="50">
<xsl:value-of select="Prop[@prop_name = 'checkedbagcount']/@val" />
</td>
</xsl:for-each>
</tr>
</table>
</td>
</xsl:template>
</xsl:stylesheet>