Как вы используете переменную в xsl при попытке выбрать узел?

StackOverflow https://stackoverflow.com/questions/5374

  •  08-06-2019
  •  | 
  •  

Вопрос

Я бы подумал, что это будет легко найти в Google, но у меня ничего не вышло.

Я хочу присвоить переменной значение из атрибута (пока просто), а затем использовать эту переменную для выбора другого узла на основе значения этого атрибута.

Пример:

<xsl:variable name="myId" select="@id" />
<xsl value-of select="//Root/Some/Other/Path/Where[@id='{@myId}']/@Name />

Это не сработает.Если я заменю {@myId} значением, которое есть в переменной, то она действительно найдет нужный узел, но такое изменение ничего не даст.Я уверен, что я что-то упускаю, или, возможно, есть другой способ сделать это.

Контекст заключается в том, что существуют связанные данные под разными узлами верхнего уровня, которые используют одно и то же значение id, поэтому мне нужно получить связанные узлы в моем шаблоне.

Это было полезно?

Решение

Ладно, я наконец-то понял это.На самом деле глупая проблема, мне просто нужно было убрать кавычки и фигурные скобки.Один из тех моментов , когда я мысль что я уже пробовал это.:D О, и я неправильно ввел @myId в первом примере, на самом деле код был $myId.

<xsl:variable name="myId" select="@id" />
<xsl value-of select="//Root/Some/Other/Path/Where[@id=$myId]/@Name" />

Другие советы

Похоже, вы запутались с использованием переменной (которая является просто $variable) и шаблонов значений атрибутов, которые позволяют вам помещать любое выражение XPath в некоторые атрибуты, например

<newElement Id="{@Id}"/>

Очевидно, что они могут быть объединены, поэтому вы можете включить переменную в шаблон значения атрибута, например:

<newElement Id="{$myId}"/>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top