私は XSLT 1.0 の初心者です。最高値を持つ一意のノードを見つけようとしたときに問題に直面しています。
ソース XML:
<Response>
<Flight>
<From>A</From>
<To>B</To>
<Passengers>
<Passenger>
<Fare>200</Fare>
<Fee>15</Fee>
<Type>ADT</Type>
</Passenger>
<Passenger>
<Fare>200</Fare>
<Fee>15</Fee>
<Type>ADT</Type>
</Passenger>
<Passenger>
<Fare>150</Fare>
<Fee>15</Fee>
<Type>CHD</Type>
</Passenger>
</Passengers>
</Flight>
<Flight>
<From>B</From>
<To>A</To>
<Passengers>
<Passenger>
<Fare>250</Fare>
<Fee>25</Fee>
<Type>ADT</Type>
</Passenger>
<Passenger>
<Fare>250</Fare>
<Fee>25</Fee>
<Type>ADT</Type>
</Passenger>
<Passenger>
<Fare>100</Fare>
<Fee>25</Fee>
<Type>CHD</Type>
</Passenger>
</Passengers>
</Flight>
</Response>
上記の XML に示すように、AB 出発地の往復結果があり、両方のフライトのチケットを購入する予定です。合計運賃、料金 (両方のフライトのいずれか高い方)、およびその合計金額を計算する必要があります。
期待される出力:
<Result>
<PassengerGroup TotalFare="1150" TotalFee="75" TotalPrice="1225"/>
</Result>
ここ、
TotalFare
Fare
すべてのタグの合計です。TotalFee
各乗客タイプの大きい値は、そのタイプの乗客数を掛けたものです。- 例: ADT の場合、手数料の値が 25 で、ADT の数が 2 であるため、ADT の合計料金は 50 です。CHD の場合、料金の値が 25 で、CHD の数が 1 であるため、CHD の合計料金は 25 です。これにより、最終的な合計料金 = 75 になります。 .
TotalPrice
ToatalFare
とTotalFee
属性の合計です。
以下のXSLTで試しました。
XSLT:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0" xmlns:exslt="http://exslt.org/common" exclude-result-prefixes="exslt">
<xsl:output method="xml" indent="yes" />
<xsl:template match="Response">
<xsl:element name="Result">
<xsl:element name="PassengerGroup">
<xsl:attribute name="TotalFare">
<xsl:value-of select="sum(//Flight/Passengers/Passenger/Fare)"/>
</xsl:attribute>
<xsl:attribute name="TotalFee">
<xsl:value-of select="sum(//Flight/Passengers/Passenger[not(Type=preceding::Passenger/Type)]/Fee)"/>
</xsl:attribute>
<xsl:attribute name="TotalFee">
<xsl:value-of select="sum(//Flight/Passengers/Passenger/Fare) + sum(//Flight/Passengers/Passenger/Fee)"/>
</xsl:attribute>
</xsl:element>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
以下の出力を得ました。
出力:
<Result>
<PassengerGroup TotalFare="1150" TotalFee="30" TotalPrice="1270"/>
</Result>
TotalFee
正しく計算されません。助けてください。ありがとう。