Ну, внутри функции нет элемента контекста, поэтому использование 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')"/>
.