Хорошо, я пытаюсь создать таблицу, но я не делаю этого правильно, у меня нет примера XSL, поскольку ничто из того, что я пытался, не приблизилось к тому, что мне нужно. (Я попытался использовать xsl: apply-templates loops, даже с режимами, и даже xsl: for-each и key(), но не может получить правильные фильтры.XSL Группировка узлов несколькими аналогичными братьями и сестрами с несколькими аналогичными неизвестными значениями
Вот пример XML, который я бы использовал . (реальный XML я использую более сложный, то это один ниже)
<report>
<item>
<vertical>
<component>
<partname>Left Side</partname>
<parttype>Side</parttype>
<partlocation>Outside</partlocation>
<material>Wood</material>
<thickness>20mm</thickness>
<colour>White</colour>
</component>
</vertical>
<vertical>
<component>
<partname>Right Side</partname>
<parttype>Side</parttype>
<partlocation>Outside</partlocation>
<material>Wood</material>
<thickness>20mm</thickness>
<colour>White</colour>
</component>
</vertical>
<vertical>
<component>
<partname>Back</partname>
<parttype>Back</parttype>
<partlocation>Inside</partlocation>
<material>Plastic</material>
<thickness>3mm</thickness>
<colour>Black</colour>
</component>
</vertical>
</item>
</report>
Таким образом, задачу я хочу сделать это, для-каждый <item>
мне нужно, чтобы начать делать таблицу, и внутри этой таблицы Мне нужно оценить каждый <component>
, чтобы узнать, сколько у них таких же <material>
, <thickness>
и <colour>
. Тогда мне нужно перечислите имя и данные материала. Далее мне нужно все <components>
, которые имеют тот же <parttypes>
и <partlocation>
, которые имеют один и тот же <material>
, <thickness>
и <colour>
, чтобы показать их <partname>
в строке для каждого из них. Нет никакого фиксированного количества материалов, которые я могу ожидать, один раз я могу получить 1, в другой раз я мог бы получить 3. И я не буду всегда знать, какие значения будут содержать узлы. Кроме того, в каждом <item>
я могу иметь 1-3 разных <parttype>
и <partlocation>
(Althought они работают в парах - и я знаю, что будет значение этих узлов)
Вот пример форматированной отделки, учитывая очень просто выше код ...
Wood, 20mm, White
Left Side
Right Side
Plastic, 3mm, Black
Back
этот вопрос очень похож, но не совсем ... xsl grouping of repetitive nodes by xml element in xslt1
Спасибо за входную hr_117, я играл с этим предложением в моем реальном файл, чтобы увидеть, если я могу сделать это делать то, что требуется, но я боюсь это может быть только половина задачи. –
Чтобы группировать также (следующий шаг) с помощью 'parttypes' и' partlocation', вам нужно иметь второй ключ (например, kmaterialpart). Это должно быть таким же, как «kmaterial», расширенным '' | ', parttypes' | ', partlocation' –
. Я, наконец, очень внимательно посмотрел на это и после небольшого смешивания, чтобы заставить его работать в моем реальном проекте, первый этап этого ответа определенно решил мою дилемму, у меня всегда были проблемы с Key() и пытались понять это немного лучше. Спасибо @ hr_117 –