создание массивов в xslt

массив может создаваться и использоваться в xslt? Раз так есть ли подходящие примеры онлайн для изучения? Если не там способ сохранить значения способом, который подражает массиву?

25
задан gary A.K.A. G4 21 July 2010 в 13:50
поделиться

3 ответа

С XSLT 2.0 вы можете моделировать любой тип данных, какой захотите.

В качестве примера:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text" omit-xml-declaration="yes"/>
    <xsl:variable name="array" as="element()*">
        <Item>A</Item>
        <Item>B</Item>
        <Item>C</Item>
    </xsl:variable>
    <xsl:template match="/">
        <xsl:value-of select="$array[2]"/>
    </xsl:template>
</xsl:stylesheet>

При любом вводе, выводе:

B

В XSLT 1.0 нет типа данных «Временное дерево результатов». Существует тип данных Result Tree Fragment, который не допускает оператора набора узлов. Итак, единственный выход - использовать функции расширений: в этом случае node-set () из EXSLT (MSXSL также имеет встроенное расширение node-set () ) .

Итак, в XSLT 1.0 без расширений у вас может быть только встроенная модель данных, или по параметрам, или по внешнему документу. В качестве примера:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text" omit-xml-declaration="yes"/>
    <xsl:variable name="inline-array">
        <Item>A</Item>
        <Item>B</Item>
        <Item>C</Item>
    </xsl:variable>
    <xsl:param name="array" select="document('')/*/xsl:variable[@name='inline-array']/*"/>
    <xsl:template match="/">
        <xsl:value-of select="$array[2]"/>
    </xsl:template>
</xsl:stylesheet>

Результат при любом вводе:

B

Я могу предоставить вам пример расширений XSLT 1.0 плюс только при желании (это не стандарт ...)

23
ответ дан 28 November 2019 в 21:27
поделиться

Последовательность XPath 2.0 (доступная в XSLT 2+) ближе всего к массиву :

(1 to 10)[3]

оценивается как 3

('a', 'b', 'a', 'c')[3]

оценивается как ' a '

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

Обратите внимание на : Последовательности не совпадают с массивами:

  1. Последовательности неизменяемы . Любая операция обновления последовательности (добавление или добавление элемента в начале, вставка элемента или удаление элемента) создает новую последовательность.

  2. Время доступа к n-му элементу не гарантируется равным O (1) , как для массивов, и может быть O (n).

8
ответ дан 28 November 2019 в 21:27
поделиться

Нет, не как таковой. Ближайшая концепция - это наборы узлов, которые представляют собой наборы узлов. Всякий раз, когда результатом выбора является количество узлов, вы получаете набор узлов. Доступ к ним можно получить с помощью индексной нотации (начиная с 1), поэтому к первому элементу набора узлов можно получить доступ с помощью такой нотации, как selectedNodes [1] .

5
ответ дан 28 November 2019 в 21:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: