передать значения и вернуть значения в xslt - PullRequest
0 голосов
/ 25 февраля 2020

Я хочу напечатать атрибуты и их значения. Итак, я создал функцию XSLT. Пытался закодировать;

<xsl:template name="preserve">
    <xsl:call-template name="single"/>
    <w:r>
        <xsl:value-of select="t:get-attr-from-ele('ewd')"/>
        <w:instrText>
            <xsl:attribute name="xml:space">
                <xsl:value-of select="'preserve'"/>
            </xsl:attribute>
            <xsl:value-of select="w:ins[1]//w:instrText"/>
        </w:instrText>
    </w:r>
</xsl:template>



<xsl:function name="t:get-attr-from-ele">
    <xsl:param name="attr"/>

    <xsl:attribute name="{$attr}">
        <xsl:value-of select="generate-id()"/>
    </xsl:attribute>
</xsl:function>

Когда я пытаюсь это сделать, я получаю следующее> сообщение об ошибке.

Нет элемента контекста

Как можно Я разрешаю это? Я использую XSLT 2

1 Ответ

0 голосов
/ 25 февраля 2020

Ну, внутри функции нет элемента контекста, поэтому использование generate-id() не сработает, так как требует элемента контекста. Также, если вы хотите, чтобы эта функция создала узел атрибута для результата, не имеет смысла использовать xsl:value-of позже для вызова функции, поскольку это создаст текстовый узел. Таким образом, в основном, если внутри функции вы хотите использовать generate-id, вам нужно явно передать узел в качестве параметра (или использовать некоторый глобальный параметр или переменную):

<xsl:function name="t:get-attr-from-ele">
    <xsl:param name="context-node" as="node()"/>
    <xsl:param name="attr" as="xs:string"/>

    <xsl:attribute name="{$attr}">
        <xsl:value-of select="generate-id($context-node)"/>
    </xsl:attribute>
</xsl:function>

Тогда вы можете использовать <xsl:sequence select="t:get-attr-from-ele(., 'ewd')"/> или <xsl:copy-of select="t:get-attr-from-ele(., 'ewd')"/>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...