Ответы пользователя по тегу XSL & XSLT
  • Как работает группировка Мюнха?

    @farza
    Web - Developer
    XSL - элемент key

    Простое определение
    Ключ может содержать элемент или множество элементов. Получить элемент или множество элементов из ключа можно при помощи функции key() по переданному в качестве аргумента значению.

    Определение из учебника
    Элемент объявляет именованный ключ, т. е. пару «имя-значение», связанную с указанным элементом в XML-документе. Этот ключ используется с фукнцией key() в выражениях XPath для осуществления эффективного доступа к связанным элементам в сложном XML-документе.


    Оригинал
    The element is a top-level element which declares a named key that can be used in the style sheet with the key() function.


    Ссылки на документацию
    https://www.w3schools.com/xml/ref_xsl_el_key.asp

    В примере выше создается ключ с именем group, который содержит множество item (match="item") и этот элемент "item" или его множество можно получить по значению атрибута group (use="@group").

    В примере выше в ключе «group» содержится множество «item», доступ к которым можно получить по значению атрибута «group» через функцию «key()».

    generate-id

    Простое определение
    Возвращает строку, которая уникально идентифицирует первый узел документа. Если в функцию передать множество, то будет возращен уникальный id первого элемента из этого множества

    Определение из учебника
    Функция generate-id возвращает уникальный строковый идентификатор первого в порядке просмотра документа узла, передаваемого ей в виде аргумента. Если аргумент опущен, функция возвращает уникальный идентификатор контекстного узла. Если аргументом является пустое множество, функция должна возвращать пустую строку.

    Функция generate-id возвращает для двух узлов один и тот же идентификатор тогда и только тогда, когда эти два узла совпадают. Это означает, что во время выполнения одного преобразования функция generate-id будет возвращать один идентификатор для одного и того же узла, а для разных узлов generate-id обязательно возвратит разные идентификаторы.


    Оригинал
    The generate-id() function returns a string value that uniquely identifies a specified node.

    If the node-set specified is empty, an empty string is returned. If you omit the node-set parameter, it defaults to the current node.


    Ссылки на документацию
    https://xsltdev.ru/xpath/generate-id/
    https://www.w3schools.com/xml/func_generateid.asp

    Квадратные скобки

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

    Этой строчкой
    <xsl:apply-templates select="item[generate-id(.) = generate-id(key('group',@group))]" />

    мы говорим следующее:
    Примени все шаблоны к тем элементам item, которые соответствуют критерии (фильтру), который указан в квадратных скобках

    В этой части
    key('group',@group)

    мы говорим следующее:
    Дайте мне множество элементов «item» из ключа «group», значение атрибута «group» которых равняется значению атрибута «group» у «item» находящегося в XML документе

    Идем далее. Этой строчкой
    generate-id(key('group',@group)
    Мы говорим следующее
    Вернув множество item с одинаковым значением атрибута «group», дай мне id первого элемента из множества

    Этой строчкой
    item[generate-id(.) = generate-id(key('group',@group))]

    Мы говорим следующее
    Примени все шаблоны для элементов «Item», generate-id которых равняется уникальному generate-id элемента.

    В итоге получается, что шаблоны применятся только для элементов «item» с уникальным атрибутом «group»

    Подробнее с примерами:
    geekspace.info/notes/1
    Ответ написан
    Комментировать