XSLT в HTML с простой группировкой данных XML с использованием шаблонов вместо каждого - PullRequest
3 голосов
/ 09 июня 2010

Я возился с выключенным и включенным xslt, так как я стал администратором sharepoint, он использует xslt много для отображения данных списка.Недавно я начал использовать его для преобразования результатов базы данных, которые я преобразовал в XML с помощью метода расширения.Я пытаюсь произвести чистый HTML.

Моя первая попытка сработала нормально.Тем не менее, я использовал для каждого повсеместно, с тех пор я прочитал, что это плохая вещь.Я прочитал кучу вещей об использовании ключей, но я не мог этого понять или заставить его работать.Поэтому я переписал эту таблицу стилей, ниже того, что ниже.Он использует шаблоны для каждого.,Если это необходимо, я могу потратить много времени и попытаться что-то произвести.

Мой вопрос: лучше ли это сделать?Также, если ключевой способ лучше, может кто-нибудь объяснить это или дать ссылку на хорошее объяснение?

Ответы [ 2 ]

1 голос
/ 09 июня 2010

Хорошим свойством XSLT является шаблон «для каждого».

Совет по использованию «шаблонов» вместо «для каждого» в основном связан с возможным неправильным использованием модели обработки XSLT.

В вашем примере ясно: один наивный «шаблон» и множество «для каждого», которые управляют процессом.

Использование ключа в самом XSLT связано с производительностью.Его полезность заключается в замене выражений XPath, которые включают в себя повторяющиеся обходы многих узлов входного дерева.Muenchian метод группировки является специальным использованием для ключей.Простая группировка может быть оптимально без использования ключей.

С другой стороны, популяция - это особый случай трансформации.Я думаю, что для поддержки лучше отделить семантику XHTML от преобразования XSLT.Посмотрите www.aranedabienesraices.com.ar в качестве примера.

1 голос
/ 09 июня 2010

В основном вопрос об использовании for-each вместо шаблонов сводится к созданию повторно используемых, более общих преобразований.

Используя шаблоны, все подходящие узлы - не только те, которые явно используются в for-each - могутВоспользуйтесь шаблоном, который помогает избежать дублирования кода и в то же время разбивает лист на более мелкие блоки, которыми легче управлять.На самом деле это почти то же самое, что иметь огромную процедуру или меньшие процедуры, вызывающие друг друга в императивном программировании.

Хотя некоторые люди предполагают, что использование шаблонов может работать лучше в некоторых движках, я считаю, что это не будетдействительно имеет значение.

Тем не менее, вы можете узнать о muenchian методе (который использует ключи) для фактической группировки данных, где у вас есть повторяющиеся ключи.Использование оси preceding-sibling очень медленное на некоторых двигателях, поэтому лучше избегать этого, когда это не обязательно.

Что-то вроде этого должно помочь при делениях (не проверено):

<xsl:key name="divisions" match="/CheckedOutBoxes/row/Division" use="." />

...

<xsl:apply-templates mode="Division" select="/CheckedOutBoxes/Division[generate-id(.)=generate-id(key('divisions', .))]" />
...