powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Как по имеющейся цифре, перейти на уровень иерархии, соответствующий этой цифре ?
13 сообщений из 13, страница 1 из 1
Как по имеющейся цифре, перейти на уровень иерархии, соответствующий этой цифре ?
    #37548831
dmitryck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если спецы поняли вопрос - хорошо)
Если нет, поясню:

Есть цифра 3. - я ее имею в переменной, например - $num
Как мне перейти на все узлы третьего уровня в документе..?

то бишь
<a>
<b>
<c>ddd</c>
</b>
</a>

к узлу "с" в данном случае..

пс. я еще пробовал складывать строки.. /* - сложить 3 раза ($num раз), чтобы получилось /*/*/* - но не умеет он строку преобразовывать в узел!!.... чтобы его использовать в селекте или в матч..

Помогите, если кто знает как это решается...
и еесть ли функция, которая строку преобразует в адрес узла... ну типа name(../..) - выдаст имя родока на 2 уровня выше..
а если $str = "../.." - то name($str) - нифига не выдаст, само собой...

вот.. собсно.. такой сабж..

Спаисибо
...
Рейтинг: 0 / 0
Как по имеющейся цифре, перейти на уровень иерархии, соответствующий этой цифре ?
    #37548864
dmitryck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PS. Я конечно могу сделать по тупому IF 'ами... типа если $num=1, то select "/*", если 2 - То select "/*/*" и пр...
но блин.. а если уровней 100... не писать же на каждый уровень такое условие.....
...
Рейтинг: 0 / 0
Как по имеющейся цифре, перейти на уровень иерархии, соответствующий этой цифре ?
    #37548866
mage.lan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmitryck,

Код: plaintext
<xsl:apply-templates select="//*[count(ancestor::*)=($num - 1)]" />
...
Рейтинг: 0 / 0
Как по имеющейся цифре, перейти на уровень иерархии, соответствующий этой цифре ?
    #37548870
mage.lan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
или даже красивее:
Код: plaintext
<xsl:apply-templates select="//*[count(ancestor-or-self::*)=$num)]" />
...
Рейтинг: 0 / 0
Как по имеющейся цифре, перейти на уровень иерархии, соответствующий этой цифре ?
    #37548874
dmitryck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mage.lan, блин-с... а я пытался юзать этот ancestor!.. только не мог понять какое ему дать имя... звездочка....!
тока не понятно... нужно ведь указать текущее имя.. он же считает от узла с определенным именем..
не могу разобрать, конструкция в скобках в качестве дополнительного аргумента выведет количество всех предков от какого узла??

по идее же должно быть типа //*[count(ancestor::ТЕКУЩИЙ_УЗЕЛ)=($num - 1)]
типа //*[count(ancestor::node())=($num - 1)]

ща.. гляну..
спасибо большое!!!..
забыл что-то про параметры узла и звездочку..)
...
Рейтинг: 0 / 0
Как по имеющейся цифре, перейти на уровень иерархии, соответствующий этой цифре ?
    #37548875
dmitryck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mage.lan,

а вижу!!.. селф.....
...
Рейтинг: 0 / 0
Как по имеющейся цифре, перейти на уровень иерархии, соответствующий этой цифре ?
    #37548877
dmitryck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mage.lan, Спасибо.. !
...
Рейтинг: 0 / 0
Как по имеющейся цифре, перейти на уровень иерархии, соответствующий этой цифре ?
    #37548989
mage.lan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmitryck,

да не за что, изучайте :)

//* - все узлы документа
ancestor-or-self:* - все предки от узла и сам

т.е. обходим каждый узел и смотрим сколько у него пап.
запрос безумно дорогой, на XML в мег я бы его уже писать не решился... если побаловаться - то можно.
...
Рейтинг: 0 / 0
Как по имеющейся цифре, перейти на уровень иерархии, соответствующий этой цифре ?
    #37549046
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще вариант
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
<xsl:template math="*">
  <xsl:param name="level" select="1"/>
  <xsl:if test="$level = $num">
    ..............
  </xsl:if>
  <xsl:apply-templates select="*">
    <xsl:with-param name="level" select="$level + 1"/>
  </xsl:apply-templates>
</xsl:template>
...
Рейтинг: 0 / 0
Как по имеющейся цифре, перейти на уровень иерархии, соответствующий этой цифре ?
    #37549057
dmitryck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_,
ага.. эт типа нормального цикла...
спасибо..)

циклы уже а-ля классические нарыл.. )
...
Рейтинг: 0 / 0
Как по имеющейся цифре, перейти на уровень иерархии, соответствующий этой цифре ?
    #37549061
dmitryck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_,
рекурсия точне.. с условием..
ну на них циклы и делают....
...
Рейтинг: 0 / 0
Как по имеющейся цифре, перейти на уровень иерархии, соответствующий этой цифре ?
    #37549067
dmitryck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mage.lan,
да... но у меня файлик всего в пару десятков строк... ) так что прокатит..

кстати, а получается, я тут уже обыскался.. что нет такой функции в xpath.. или в самом xsl.. которая бы строку преобразовывала в ключевое слово некое..
ну типа $s="/*" и чтобы при select="преобр_в_узел_xpath($s)" работало бы как select="/*"
это вообще решило бы много вопросов.. подобных.. то-есть когда ты можешь как в обычных яз. прогр. сложить че хошь и подставить куда хошь и пр. да и вообще свободы бы появилось больше..

полезная была бы функция типа такого..

пс. хотя если так продолжать думать, то уже не совсем концепция xslt.. тогда можно и вовсе все ключевые слова тоже преобразовывать их строк... типа - $s1='ances', $s2='tor::*, а потом юзать эту $s1+$s2 .. но для концепции шаблонов - это канечн бардак... )) но бывает вот.. такой свободы программистской и не хватает..

и хотя бы одну функцию преобразования строки в узел - могли бы предусмотреть.............
имх
...
Рейтинг: 0 / 0
Как по имеющейся цифре, перейти на уровень иерархии, соответствующий этой цифре ?
    #37550302
mage.lan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmitryck,

хаки, безусловно есть, каждый из трансформеров предоставляет свои. Можно вообще использовать императивные языки, типа c# в шаблонах, только на практике это все не нужно. XSL + XPath обладают всеми средствами, чтобы расковырять XML DOM вдоль и поперек.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Как по имеющейся цифре, перейти на уровень иерархии, соответствующий этой цифре ?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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