2016-11-29 4 views
1

Я использую XSLT 1.1 и у меня есть внешний документ, я доступ как так:Применить шаблоны к узлу, полученный из переменной XPATH

<xsl:variable name="doc2URI" select="ancestor-or-self::book/@secondDoc"/> 
<xsl:variable name="doc2" select="document($doc2URI)"/> 

То, что я пытаюсь сделать, это применить шаблон узел в этом документе, который получают с помощью выражения XPath, найденного в переменной XSLT:

<xsl:variable name="xpath"> 
    <xsl:call-template name="genPath"/> 
</xsl:variable> 

$xpath переменной, например, может в какой-то момент в коде содержит результат: /book[1]/title[1].

То, что я хотел бы сделать, это:

<xsl:apply-templates select="$doc2/$xpath"/> 

Но это не работает. Если я пойду:

<xsl:apply-templates select="$doc2/book[1]/title[1]"/> 

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

Мой вопрос в том, как я могу применить шаблон к этому внешнему документу через выражение XPath, содержащееся в переменной $xpath?

+0

Это очень маловероятно, что вы используете XSLT 1.1 - который был рабочий проект опубликован в 2001 году, а затем отказались. Были реализации, но они либо перешли на XSLT 2.0 (например, саксон), либо исчезли с лица земли (например, jd.xslt). –

+0

Я думаю, что это может быть 1.1. Это находится на вершине моей таблицы стилей

+0

Вы можете написать version = "93.7" в верхней части таблицы стилей, но это не соответствовало бы версии 93.7 XSLT. –

ответ

0

Вы в основном ищете eval для XSLT. Это al XSLT 3.0 feature.

В более ранних версиях вам понадобится расширение. См:

XSL. Evaluate expression

+0

Спасибо, но я не могу переложить все на 3.0 –

Смежные вопросы