2012-03-06 5 views
0

Как я могу получить позицию узла на основе определенного значения атрибута? Следующий пост показывает, как сделать это с помощью элементов:Найти местоположение узла с использованием xpath с помощью атрибутов

Find position of a node using xpath

Таким образом, если мы изменим пример XML в посте упоминалось выше:

<a> 
    <b val="zyx" /> 
    <b val="wvu" /> 
    <b val="tsr" /> 
    <b val="qpo" /> 
</a> 

Как бы я получить позицию/b [@val = 'tsr']?

ответ

1

Должно быть почти точно так же:

count(a/b[@val='tsr']/preceding-sibling::*)+1 

Пример использования ...

XSLT 1,0

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

    <xsl:template match="/"> 
    <xsl:value-of select="count(a/b[@val='tsr']/preceding-sibling::*)+1"/> 
    </xsl:template> 

</xsl:stylesheet> 

Выход:

3 
+0

ли вы проверить ваше решение? Когда я копирую ваше решение дословно и запускаю его против моего тестового файла, я получаю вывод 1. Я пробовал что-то похожее на то, что вы разместили, прежде чем публиковать этот вопрос, и я все еще получал 1 вместо 3 – rokeefe1

+0

@ user1252899 - Да, я сделал , Я тестировал с Xalan, Saxon 6.5.5, Saxon 9.3 (HE, PE и EE) и AltovaXML, и все это дало мне результат «3». Является ли ваш тестовый файл точно таким же, как XML, размещенный в вопросе? Какой процессор вы используете? –

+0

Проблема была в моем XML-файле. Спасибо за вашу помощь! – rokeefe1

Смежные вопросы