У меня есть довольно большой XML-файл, содержащий список моделей автомобилей, их цену и ежемесячную цену оплаты. На самом деле есть масса других данных, но это важные фрагменты данных, которые меня интересуют.Сортировка сгруппированных элементов с использованием XSLT 1.0
Есть множество дублированных моделей там по разным ценам/ежемесячным платежам. Моя задача, которую я сделал до сих пор с помощью этого форума, состоит в том, чтобы создать отдельный список моделей (без дубликатов), показывая самый дешевый автомобиль в этой модели.
Бит, на котором я застрял, должен ли я отсортировать этот список с самым низким ежемесячным платежом до самого высокого ежемесячного платежа. Усложнение, являющееся самым дешевым транспортным средством, не всегда равно минимальному ежемесячному платежу.
Мой XML выглядит как это:
<?xml version="1.0" encoding="utf-8"?>
<Dealer>
<Vehicle>
<Model>KA</Model>
<DealerPriceNoFormat>8700.00</DealerPriceNoFormat>
<OptionsFinanceMonthlyPayment>300.50</OptionsFinanceMonthlyPayment>
</Vehicle>
<Vehicle>
<Model>KA</Model>
<DealerPriceNoFormat>10000.50</DealerPriceNoFormat>
<OptionsFinanceMonthlyPayment>270.50</OptionsFinanceMonthlyPayment>
</Vehicle>
<Vehicle>
<Model>Focus</Model>
<DealerPriceNoFormat>12000.00</DealerPriceNoFormat>
<OptionsFinanceMonthlyPayment>340.00</OptionsFinanceMonthlyPayment>
</Vehicle>
<Vehicle>
<Model>KA</Model>
<DealerPriceNoFormat>9910.00</DealerPriceNoFormat>
<OptionsFinanceMonthlyPayment>430.75</OptionsFinanceMonthlyPayment>
</Vehicle>
<Vehicle>
<Model>KUGA</Model>
<DealerPriceNoFormat>23010.00</DealerPriceNoFormat>
<OptionsFinanceMonthlyPayment>550.20</OptionsFinanceMonthlyPayment>
</Vehicle>
<Vehicle>
<Model>Focus</Model>
<DealerPriceNoFormat>15900.00</DealerPriceNoFormat>
<OptionsFinanceMonthlyPayment>430.00</OptionsFinanceMonthlyPayment>
</Vehicle>
</Dealer>
Как я уже говорил, есть множество других данных, но это основная структура.
И мой XSLT выглядит следующим образом:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:output method="html" omit-xml-declaration="yes" indent="yes" version="4.0" encoding="iso-8859-1" />
<xsl:key name="by-id" match="Dealer/Vehicle" use="Model"/>
<xsl:template match="Dealer">
<xsl:copy>
<xsl:for-each select="Vehicle[generate-id() = generate-id(key('by-id', Model)[1])]">
<xsl:for-each select="key('by-id', Model)">
<xsl:sort select="DealerPriceNoFormat" data-type="number" order="ascending" />
<xsl:if test="position()=1">
<p>
<xsl:value-of select="Model" /><br />
<xsl:value-of select="DealerPriceNoFormat" /><br />
<xsl:value-of select="OptionsFinanceMonthlyPayment" />
</p>
</xsl:if>
</xsl:for-each>
</xsl:for-each>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Как я уже сказал, я почти там, просто не могу понять, как то упорядочить список вывода по OptionsFinanceMonthlyPayment.
Так что в случае вывода выше будут выглядеть примерно так, показывая самый дешевый автомобиль в каждой модели, но отсортированы по ежемесячной оплате в списке вывода:
KA
8700.00
300.50
Focus
12000.00
340.00
KUGA
23010.00
550.20
Спасибо заранее.
Можете ли вы показать результат, ожидаемый в этом случае? Спасибо! –
Я редактировал свое сообщение для демонстрации нужного выхода. Приветствия. –
"*, отсортированный по ежемесячному платежу в выходном списке *" Означает ли это, что он сортируется по ежемесячной оплате самого дешевого автомобиля в каждой группе или что-то еще? –