xpath - номер узла в порядке просмотра

Дед Анвирыч

Новичок
xpath - номер узла в порядке просмотра

Возможно ли с помощью XPath найти узел по номеру, обозначающему порядковый номер узла в порядке просмотра?
Например:

PHP:
<node>      //0
  <node/>   //1
  <node>    //2
    <node/> //3
  </node>
  <node/>   //4
</node>
 

crocodile2u

http://vbolshov.org.ru
хе-хе! а тогда еще проще:
"/root/node/node/node......./node"

Только я бы в таком случае говорил не о порядковом номере, а об уровне вложенности узла....
 

Дед Анвирыч

Новичок
нет :)
у меня есть номер нужного мне узла, вычесленый по указаному в первом посте примеру.
мне нужно с помощью xpath по этому номеру найти этот узел
 

crocodile2u

http://vbolshov.org.ru
в таком случае - я пас... может быть, ты скажешь, зачем тебе это нужно? и может быть, есть решение, которое позволит обойтись более стандартными способами?
 

Дед Анвирыч

Новичок
Запросто.
Есть во флеше компонент - tree называется. Возвращает номер узла именно по такой схеме. Хочу построить путь от корня до этого узла и передать его на сервер.
Чтоб не гонять все дерево туда-сюда
 

crocodile2u

http://vbolshov.org.ru
Хорошо бы услышать мнение профи - лично я не слишком-то силен в XPath, но своего ты можешь добиться путем рекурсивного обхода иксэмэль-дерева. Одним запросом - лично я не представляю, как. впрочем, лучше бы сказал кто поопытнее...
 

Profic

just Profic (PHP5 BetaTeam)
Попробуй так:
/descendant-or-self::node[position() = $num]
или сокращенно
/descendant::node[position() = $num]

из доки:
NOTE: The location path //para[1] does not mean the same as the location path /descendant::para[1]. The latter selects the first descendant para element; the former selects all descendant para elements that are the first para children of their parents.
только вот определить точный номер придется вначале эксперементально :) а потом уже можно юзать разницу разницу :) Но она если и есть, то будет ±1
 

Дед Анвирыч

Новичок
Именно! :) Оно самое!
Так... а функция которая путь от корня возвращает ест? или перебирать всех родителей до рута?

-~{}~ 02.08.04 17:29:

так... стоп... А если у меня узлы не все называются node, а по разному?
 

Profic

just Profic (PHP5 BetaTeam)
Дед Анвирыч
тебе же только node нужен?

в общем еще попробуй вот так
/descendant::element()[position() = $num]
 

jian

Guest
Re: xpath - номер узла в порядке просмотра

xml
PHP:
<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="numbering.xsl"?>
<node num="0">
  <node num="1"/>
  <node num="2">
    <node num="3">
      <node num="4"/>
      <node num="5">
        <node num="6"/>
      </node>
      <node num="7"/>
      <node num="8"/>
    </node>
    <node num="9"/>
  </node> 
  <node num="10"/>
</node>
xsl
PHP:
<?xml version="1.0" encoding="Shift_JIS"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:param name="para" select="6"/>

<xsl:template match="/">
 <xsl:apply-templates select="*"/>
</xsl:template>

<xsl:template match="*">
 <xsl:value-of select="@num"/>
 <xsl:if test="( count(preceding::*) + count(ancestor::*) ) = $para">
  **********
 </xsl:if>
 <br/>
 <xsl:apply-templates select="*"/>
</xsl:template>

</xsl:stylesheet>
resultat
PHP:
0
1
2
3
4
5
6 ********** 
7
8
9
10
cheers
 
Сверху