0
我是XSLT 1.0中的新手。當我試圖找到具有最高值的唯一節點時,我遇到了一個問題。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,沒有爲A-B產地目的地的往返結果,我會購買門票的兩個航班。 我需要計算總票價,費用(以兩個航班中的最高者爲準)及其總價。
預期輸出:
<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
不正確地計算。請幫忙。謝謝。
你說ADT乘客數量爲2,但它實際上是4 ... ???請編輯問題並更正。 – 2013-02-23 16:39:03
@DimitreNovatchev - ADT乘客的數量是2. Source XML在不同的航班上使用不同的ADT價格。首先「飛行」標籤顯示,如果您搭乘此航班旅行,它將收取200 + 15 = 215,第二個「航班」顯示如果您搭乘此航班旅行,它將收取250 + 25 = 275。 – 2013-02-25 06:17:37