Я работаю с процессом, который использует одно действие XSLTService для преобразования XML. Он должен будет использовать как обычный источник XML, так и переменные процесса типа String и XML. Моя проблема в том, что я не могу понять, как вставлять переменные процесса типа XML в исходные шаблоны XSLT. У меня нет проблем со вставкой переменных типа String.
Это часть вставки моей таблицы стилей:
<xsl:variable name="stringvariable" select="'{$/process_data/@stringVariable$}'"/>
<xsl:variable name="externalNodes" select="'{$/process_data/inputNodeNames$}'"/>
Я попытался вставить данные между начальным и конечным тегами элемента переменной, но это не помогло. Строковая переменная вставляется и затем успешно распечатывается для проверки.
Я также создал локальную переменную (с тем же содержимым, что и внешняя) для справки:
<xsl:variable name="internalNodes">
<root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<block>$.Formularmetadata</block>
<block>$.Sorteringsdata</block>
<block>$.Metadata</block>
<block>$.Verksamhetsdata</block>
</root>
</xsl:variable>
Затем я вызываю count(exsl:node-set()) для обеих XML-переменных в шаблоне, но только локальная переменная имеет значение выше 0.
Как я могу заставить это работать?
/BS
PS. Это полная таблица стилей XSL:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:exsl="http://exslt.org/common" extension-element-prefixes="exsl">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:variable name="stringvariable" select="'{$/process_data/@stringVariable$}'"/>
<xsl:variable name="externalNodes" select="'{$/process_data/inputNodeNames$}'"/>
<xsl:variable name="internalNodes">
<root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<block>$.Formularmetadata</block>
<block>$.Sorteringsdata</block>
<block>$.Metadata</block>
<block>$.Verksamhetsdata</block>
</root>
</xsl:variable>
<!-- Identity rule.-->
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<!-- Rewrite attribute ref to work with new XML.-->
<xsl:template match="*[local-name()='bind']/@ref">
<xsl:value-of select="$stringvariable "/>
<xsl:value-of select="' Internal'"/><xsl:value-of select="count(exsl:node-set($internalNodes)/root/block)"/>
<xsl:value-of select="' External'"/><xsl:value-of select="count(exsl:node-set($externalNodes)/root/block)"/>
</xsl:template>
</xsl:stylesheet>