鉴于我的输入 XML:
<?xml version="1.0" encoding="utf-8"?>
<FlightAvailability>
<FareDetails>
<Fare ID="2007" DepartureDate="2012-11-23T07:05:00">
<FareTypes>
<FareType FareType="Promo1">
<FareInfo Class="Y" FareBasis="Y" Fare="1500"/>
</FareType>
<FareType FareType="Promo2">
<FareInfo Class="Y" FareBasis="Y" Fare="1000"/>
</FareType>
</FareTypes>
</Fare>
<Fare ID="2008" DepartureDate="2012-11-23T08:00:00">
<FareTypes>
<FareType FareType="Promo1">
<FareInfo Class="Y" FareBasis="Y" Fare="2500"/>
</FareType>
<FareType FareType="Promo2">
<FareInfo Class="Y" FareBasis="Y" Fare="2000"/>
</FareType>
</FareTypes>
</Fare>
</FareDetails>
<SegmentDetails>
<Segment ID="2007" Origin="DEL" Destination="BOM"
DepartureDate="2012-11-23T07:05:00" Airline="YY" ArrivalDate="2012-11-23T08:55:00"
Stops="0" AircraftType="320"
FlightNum="100"/>
<Segment ID="2008" Origin="DEL" Destination="BOM"
DepartureDate="2012-11-23T08:00:00" Airline="YY" ArrivalDate="2012-11-23T09:55:00"
Stops="0" AircraftType="320" FlightNum="200"/>
</SegmentDetails>
</FlightAvailability>
我想创建一个输出 XML,其中我选择 FareType“Promo1”的 FareTypes,并通过匹配 ID(例如 Fare 和 Segment 标签中的 2007)找到相应的 Segment。当我在 FareDetails/Fare 中迭代 for-each 并获取 ID 时,我如何传递 ID 并获取特定的 Segment 信息。我是 XSL 的新手,知道这可能应该用参数调用模板,其中参数是 ID,但无法设置它。我试图传递一个变量,但它没有从 Segments 中挑选任何东西。
这是我尝试过的 XSL:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output version="1.0" method="xml" omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="/">
<xsl:element name="AvailRS">
<xsl:element name="Availability">
<xsl:for-each select="//FareDetails/Fare">
<xsl:element name="item">
<xsl:element name="Fares">
<xsl:variable name = "lfid" select="@ID"/>
<xsl:element name = "ID"><xsl:value-of select="$lfid"/></xsl:element>
<xsl:for-each select="FareTypes/FareType[@FareType='Promo1']">
<xsl:element name="item">
<xsl:element name="BaseAmount">
<xsl:value-of select="ceiling(FareInfo/@Fare)"/>
</xsl:element>
<xsl:element name="FareBasisCode">
<xsl:value-of select="FareInfo/@FareBasis"/>
</xsl:element>
<xsl:element name="FareClass">
<xsl:value-of select="FareInfo/@Class"/>
</xsl:element>
</xsl:element>
</xsl:for-each>
</xsl:element>
<xsl:element name="Flights">
<xsl:variable name="seg" select="//SegmentDetails/Segment[@ID='$lfid']"/>
<xsl:element name="item">
<xsl:element name="FlightNumber"><xsl:value-of select="$seg/@FlightNum"/></xsl:element>
<xsl:element name="DepTime"><xsl:value-of select="$seg/@DepartureDate"/></xsl:element>
<xsl:element name="ArrTime"><xsl:value-of select="$seg/@ArrivalDate"/></xsl:element>
<xsl:element name="Origin"><xsl:value-of select="$seg/@Origin"/></xsl:element>
<xsl:element name="Destination"><xsl:value-of select="$seg/@Destination"/></xsl:element>
<xsl:element name="Stops"><xsl:value-of select="$seg/@Stops"/></xsl:element>
<xsl:element name="Aircraft"><xsl:value-of select="$seg/@AircraftType"/></xsl:element>
</xsl:element>
</xsl:element>
</xsl:element>
</xsl:for-each>
</xsl:element>
<Status>Success</Status>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
这不会从 Segment 中选择数据:
<AvailRS>
<Availability>
<item>
<Fares>
<ID>2007</ID>
<item>
<BaseAmount>1500</BaseAmount>
<FareBasisCode>Y</FareBasisCode>
<FareClass>Y</FareClass>
</item>
</Fares>
<Flights>
<item>
<FlightNumber></FlightNumber>
<DepTime></DepTime>
<ArrTime></ArrTime>
<Origin></Origin>
<Destination></Destination>
<Stops></Stops>
<Aircraft></Aircraft>
</item>
</Flights>
</item>
<item>
<Fares>
<ID>2008</ID>
<item>
<BaseAmount>2500</BaseAmount>
<FareBasisCode>Y</FareBasisCode>
<FareClass>Y</FareClass>
</item>
</Fares>
<Flights>
<item>
<FlightNumber></FlightNumber>
<DepTime></DepTime>
<ArrTime></ArrTime>
<Origin></Origin>
<Destination></Destination>
<Stops></Stops>
<Aircraft></Aircraft>
</item>
</Flights>
</item>
</Availability>
<Status>Success</Status>
</AvailRS>
我想在上面的例子中得到的是与通过 ID 属性(2007、2008)连接的 Fare 对应的 Segment 信息,但是 $id 变量不起作用。如何选择对应的ID?