Я новичок в 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
вычисляется неправильно. Пожалуйста помоги. Спасибо.
Flight
показывает, что если вы путешествуете этим рейсом, он будет стоить 200+15=215, второйFlight
показывает, что если вы путешествуете этим рейсом, он будет взимать плату 250+25=275. - person Ankur Raiyani   schedule 25.02.2013