В XSLT 1.0 переменная, определенная, как в вашем примере, называется фрагментами дерева результатов (RTF), и вы можете использовать xsl:copy-of
только для копирования всего фрагмента в дерево результатов или xsl:value-of
дляскопируйте весь контент.Пример
<xsl:copy-of select="$LANG"/>
Если вы хотите обрабатывать переменную как временное дерево, вам нужно расширение node-set()
.
Обычный способ работы со статическими фрагментами дерева (такими как таблицы поиска) в XSLT1.0 - определить их как дочерние элементы корневых элементов таблицы стилей (используя пользовательское пространство имен).Затем вы можете использовать функцию document()
для получения требуемого значения.
Примечание Если вы используете Saxon (v> 6.5), вы можете просто установить версию таблицы стилей на 1.1 , и вы сможете управлять RTF без какого-либо расширения набора узлов.
[XSLT 1.0]
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:empo="http://stackoverflow.com/users/253811/empo">
<empo:LANG>
<empo:foo>
<empo:bar>Hello</empo:bar>
</empo:foo>
</empo:LANG>
<xsl:template match="/">
<xsl:variable name="LANG" select="document('')/*/empo:LANG"/>
<xsl:value-of select="$LANG/empo:foo/empo:bar"/>
</xsl:template>
</xsl:stylesheet>