Я разместил другой вопрос с этим как с одним аспектом. Мне сказали уточнить вопрос, но этот вопрос уже был довольно длинным и сложным, поэтому я создал новый.
Я хочу знать, существует ли стандартный способ ссылки на атрибут узла current в выражении XPath, проверяющем другое.
В качестве примера рассмотрим следующий XSLT
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:for-each select="potato/stem[eye]">
In session <xsl:value-of select="@sessionID"/>, the potato had <xsl:value-of select="/potato/stem[@sessionID=@sessionID][scc]/scc/@leafnumber"/> s.c.c. leaves.
</xsl:for-each>
</xsl:template>
(XML source at bottom of this question.) (Note that the for-each references nodes of type stem[eye] but the second value requested references nodes of type stem[scc], which are on a different branch of the source XML tree.)
Теперь, очевидно, часть «@sessionID=@sessoinID» в основном бессмысленна, потому что XPath воспринимает это как «значение атрибута sessionID узла должно равняться... значению атрибута sessionID узла».
Но я хочу сказать: «Проверьте, чтобы убедиться, что значение атрибута seesionID этого узла (тот, что в выражении XPath) совпадает с идентификатором сеанса узла любого узла /stem[eye], в котором я нахожусь. Сейчас."
Я не могу сделать это с переменной, потому что вам не разрешено объявлять переменную в предложении for-each.
Для справки, это источник XML. Его структура не такая, как хотелось бы, но это то, с чем мне приходится работать.
<?xml version="1.0" encoding="utf-8"?>
<potato>
<stem sessionID="1">
<eye number = "25"/>
</stem>
<stem sessionID="3">
<eye number = "33"/>
</stem>
<stem sessionID="1">
<scc leafnumber = "234" />
</stem>
<stem sessionID="2">
<scc leafnumber = "433"/>
</stem>
<stem sessionID="3">
<scc leafnumber = "463"/>
</stem>
<stem sessionID="1">
<agd leafnumber = "154"/>
</stem>
<stem sessionID="2">
<agd leafnumber = "233"/>
</stem>
<stem sessionID="3">
<agd leafnumber = "113"/>
</stem>
</potato>
Результат, который я ищу:
В первом сеансе у картофеля было 234 s.c.c. листья.
В сеансе 3 у картофеля было 463 s.c.c. листья.
(Конечно, это всего лишь пример песочницы. Я понимаю, что, вероятно, есть простые способы выполнить приведенный выше вывод совершенно по-другому, но я надеюсь, что этот пример отвечает на мой вопрос, а именно, как использовать значения, связанные с текущим узлом. (скажем, в for-each) в предикате для XPath, ищущего другой.)