powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / preceding-sibling
4 сообщений из 4, страница 1 из 1
preceding-sibling
    #33714485
Фотография selinoth
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Люди, помогите решить проблему:
Код: plaintext
<xsl:value-of select="count(../preceding-sibling::*)">
возвращает то же самое, что и
Код: plaintext
<xsl:value-of select="count(../*)">
В результате приходится писать такую вот лажу, наличие которой травит мне душу:
Код: plaintext
<xsl:value-of select="count(../*) - count(../following-sibling::*)">
Последний вариант работает.

Пояснение:
Я пытаюсь запросить количество пройденных узлов. Ф-ция position() в данном случае не доступна или имеет другой смысл, поэтому я не могу её использовать.
...
Рейтинг: 0 / 0
preceding-sibling
    #33714849
selinothЛюди, помогите решить проблему:
Код: plaintext
<xsl:value-of select="count(../preceding-sibling::*)">
возвращает то же самое, что и
Код: plaintext
<xsl:value-of select="count(../*)">
В результате приходится писать такую вот лажу, наличие которой травит мне душу:
Код: plaintext
<xsl:value-of select="count(../*) - count(../following-sibling::*)">
Последний вариант работает.

Пояснение:
Я пытаюсь запросить количество пройденных узлов. Ф-ция position() в данном случае не доступна или имеет другой смысл, поэтому я не могу её использовать.
По-моему, вы запутались, что вам на самом деле нужно. Если под "количеством пройденных элементов" вы подразумеваете количество предыдущих (братьев) элементов на том же уровне, что и контекстный узел, то:
Код: plaintext
1.
2.
3.
<xsl:value-of select="count(preceding-sibling::*)">
или то же самое
<xsl:value-of select="position() - 1">
Если же это количество предыдущих элементов на родительском уровне:
Код: plaintext
<xsl:value-of select="count(../preceding-sibling::*)">
Если количество дочерних элемнетов всех предыдущих элемнтов родительского узла:
Код: plaintext
<xsl:value-of select="count(../../*[position() &lt; current()/../position()]/*)">
Короче:
../* - это все узлы на текущем уровне
../following-sibling::* - это все предыдущие узлы на родительском уровне
Поэтому
Код: plaintext
count(../*) - count(../following-sibling::*)
имеет мало смысла.
...
Рейтинг: 0 / 0
preceding-sibling
    #33715056
Фотография selinoth
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На самом деле я не запутался... мне нужно количество элементов но не в текущем контексте, поскольку выборка производится по условию и position() возвращает номер текущего узла относительно тех, которые удовлетворяют запросу. Мне нужно знать, сколько фактических (по документу) предшественников существует у каждого узла, попадающего в выборку и в этом случае
Код: plaintext
1.
<xsl:value-of select="count(preceding-sibling::*)">
нЕ то же самое, что и
Код: plaintext
1.
<xsl:value-of select="position() - 1">
...
Рейтинг: 0 / 0
preceding-sibling
    #33715322
selinothНа самом деле я не запутался... мне нужно количество элементов но не в текущем контексте, поскольку выборка производится по условию и position() возвращает номер текущего узла относительно тех, которые удовлетворяют запросу. Мне нужно знать, сколько фактических (по документу) предшественников существует у каждого узла, попадающего в выборку и в этом случае
Код: plaintext
1.
<xsl:value-of select="count(preceding-sibling::*)">
нЕ то же самое, что и
Код: plaintext
1.
<xsl:value-of select="position() - 1">

Согласен, при выборке по условию, это не одно и тоже. count(preceding-sibling::*) - то, что вам нужно. Ну или - то же самое - count(../*) - count(following-sibling::*) - 1 .
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / preceding-sibling
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]