Я мог подумать, что это будет легко для Google, но мне это не удалось.
Я хочу присвоить переменной значение атрибута (пока просто), а затем использовать эту переменную для выбора другого узла на основе значения этого атрибута.
Пример:
<xsl:variable name = "myId" select = "@id" />
<xsl value-of select = "//Root/Some/Other/Path/Where[@id='{@myId}']/@Name />
Это не работает. Если я заменю {@myId} значением, которое есть в переменной, тогда он найдет правильный узел, но привязка его таким образом ничего не даст. Я уверен, что что-то упускаю, или, возможно, есть другой способ сделать это.
Контекст состоит в том, что есть связанные данные под разными узлами верхнего уровня, которые имеют одно и то же значение идентификатора, поэтому мне нужно получить связанные узлы в моем шаблоне.





Хорошо, наконец-то разобрался. Действительно, глупая проблема, мне просто нужно было опустить кавычки и фигурные скобки. Один из тех случаев, когда я мысль, что я уже пробовал это. : 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}"/>
Есть еще цитата, которой не должно быть. Это очень небольшое редактирование, поэтому я не могу сделать это, не изменив также текст (ограничение на минимальное количество символов). <xsl: variable name = "myId" select = "@ id" /> <xsl value-of select = "// Корень / Некоторые / Другое / Путь / Где [@ id = $ myId] / @ Name />