В моем xml я хочу, чтобы определенные узлы menuitems/menuitem
, которые будут находиться в разных произвольных положениях под его родительским элементом (я не хочу селектор жесткого кода).Как получить позицию узла на основе значения дочернего элемента
Возможно ли получить позицию узла menuitem
, который имеет правильное значение в элементе имени под ним, что означает menuitems/menuitem/name
. Короче: выбор menuitem
, который имеет значение name
под ним.
<one>
<menuitems>
<menuitem> <!-- I dont want this one -->
<name>
...
</name>
</menuitem>
<menuitem> <!-- I want this one at position 2 under <one> -->
<name>
... <!-- Based one correct name value here -->
</name>
</menuitem>
</menuitems>
</one>
<two>
<menuitems>
<menuitem> <!-- I want this one at position 1 under <two> -->
<name>
...
</name>
</menuitem>
</menuitems>
</two>
я могу легко узнать, если один menuitem
под menuitems
имеет правильное name
значение. Как так:
<xsl:value-of select="current()/menuitems/menuitem/name = 'OhYes'"></xsl:value-of>
который будет возвращать true
. Но в какой позиции это menuitem
среди других menuitem
, которые вернулись true
? Выбор под одним и тем же родителем и на том же уровне.
Я хочу, чтобы избежать этого:
<xsl:if test="current()/menuitems/menuitem[1]/name = 'OhYes'"> .. </xsl:if>
<xsl:if test="current()/menuitems/menuitem[2]/name = 'OhYes'"> .. </xsl:if>
Пожалуйста, напишите «рабочий» образец. То есть тот, который может быть создан для демонстрации того, что вы просите? – MattH
@MattH Посмотреть сейчас. – gorn
Вы действительно ищете место? Или вас просто интересует выбор определенного элемента «menuitem» на основе его дочернего элемента «name»? Если вы просто используете путь, например '// */menuitems/menuitem [name = 'OhYes']', вы выбираете элементы элемента. Если вы действительно хотите вывести позицию, используйте, например, ' xsl: template>'. Если вам нужен полный код, рассмотрим, пожалуйста, точный тип (т. Е. Html или xml или текст) и содержимое результата, который вы хотите создать с помощью XSLT 2.0. –