Вероятно, вы имеете в виду, что значение $xpath
является строкой, буквальной или нет, которую вы затем хотите оценить. Другое дело сказать:
<xf:var name="xpath" value="/my/xpath/expression"/>
а также:
<xf:var name="xpath" value="'/my/xpath/expression'"/>
В первом случае переменная $xpath
содержит выражение XPath, которое вычисляется, когда переменной требуется ее значение. Результатом будет тип XPath, такой как строка, элемент или вообще любая последовательность элементов XPath (item()*
). Если ваше выражение действительно говорит /path/to/foo/bar
, то результатом будет последовательность из нуля или более узлов элементов с именем bar
.
Во втором случае обратите внимание на кавычки '
. Это означает, что значение $xpath
является строкой.
Если вы хотите, чтобы другая конструкция XForms делала с этой строкой что-то помимо воспроизведения с ней как со строкой, вам придется вычислить это выражение динамически.
Для этого есть функция saxon:evaluate()
. Итак, вы можете написать:
<xf:input ref="saxon:evaluate($xpath)"/>
Вы должны убедиться, что префикс пространства имен saxon
находится в области действия, с:
xmlns:saxon="http://saxon.sf.net/"
Это еще кое-что, а именно, в каком контексте выполняется выражение. В большинстве случаев должно работать.
person
ebruchez
schedule
01.05.2014
<xf:input ref="{$xpath}" />
? Или вам нужен строковый литерал? Тогда попробуйте:<xf:var name="xpath" value="'/my/xpath/expression'" />
- person CodeManX   schedule 25.04.2014<xf:variable name="xpath" select="/my/xpath/expression" />
? Также взгляните на параметр привязки, возможно, он принимает переменные. - person CodeManX   schedule 25.04.2014ref
. Кроме того, поддерживается<xf:variable select="…">
, но XForms 2.0 стандартизирует<xf:var value="…">
. - person ebruchez   schedule 02.05.2014