Кевин, я собираюсь опубликовать здесь немного вашего кода, чтобы мне не пришлось переключаться на pastie:
<!-- XSL CODE FRAGMENT -->
<xsl:choose>
<!-- If one of my ancestor items is the Active Item, then show myself and my siblings -->
<xsl:when test="boolean(ancestor::item[@id = $activeItemID])">
<xsl:apply-templates select="//submenu[@child_of = $activeItemID]"/>
</xsl:when>
<!-- If one of my child items is the Active Item, then show my siblings -->
<xsl:when test="boolean(descendant::item[@id = $activeItemID])">
<xsl:apply-templates
select="//submenu [@child_of = number(descendant::item[@id = $activeItemID]/parent::submenu/parent::item/@child_of)]"/>
</xsl:when>
<xsl:otherwise>
<!-- Either myself or one of my siblings is the active Item, so simply show myself and my siblings -->
<xsl:apply-templates
select="//submenu[@child_of = number(//item[@id = $activeItemID]/@child_of)]"/>
</xsl:otherwise>
</xsl:choose>
Поскольку вы не опубликовали ни одного из окружающих XSLT, у нас нет возможности узнать, что здесь за контекстный элемент. Например, вы перебираете все элементы элемента? Другими словами, когда в вышеприведенных комментариях говорится «элементы моего предка», «мои братья и сестры» и т. Д., Мы не знаем, какой узел является «мной».
Затем, после использования узла контекста для проверки условий, связанных с предками / потомками / братьями и сестрами узла контекста, вы применяете шаблоны к элементам подменю, которые странным образом не имеют отношения к узлу контекста.
Мне действительно трудно понять, что ты пытаешься сделать. В примере кода вы применяете шаблоны к submenu
элементам; но в комментариях вы говорите, что хотите выбрать item
элементов.
В своем комментарии к @Michael вы сказали: «Мне нужен xslt для возврата набора узлов, которые являются дочерними элементами подменю [@id = 1010]». Для этого код будет
<xsl:variable name="childNodes" select="//submenu[@id = 1010]/*" />
(Я предполагаю, что вы заботитесь только о дочерних элементах, а не о текстовых узлах (пробельных).) Это даст $ childNodes набор узлов, состоящий из четырех <item>
элементов с идентификаторами 1016, 1017, 1019, 1020.