xmlhack.ru XML-форумы
Обсуждение XML и связанных с ним технологий

помогите решить задачку (что-то наверное с generate-id)


Автор Сообщение
flax
Аспирант

Зарегистрирован: 31.01.2003
Сообщения: 100
Откуда: Minsk
[4956] Пт Сен 05, 2003 11:49
помогите решить задачку (что-то наверное с generate-id)
есть хмл-дерево (узлы item). Нахожу все листья (item[not(item)]). У каждого листа воосстанавливаю цепочку предков (Ancestor-or-self::item). Она идет по порядку вложенности от рута к листу
Для каждой такой цепочки надо получить следующее представление

Код:


<Row>
 <cell><!--{@name этого предка}--></cell>
 <cell><!--{@name следующего по цепочке предка}--></cell>
итд
</Row>


ОДнако, для следующая цепочка\строка должна содержать (обрываться) на первом общем предке, т.е

Код:


itm(0){
   itm(1){
      itm(2)
      itm (3){
          itm(4)
          }
      }
   itm(5)
   }
     


для листа itm(2) в ROW должны быть itm(0,1,2)
для листа itm(4) в его цепочке\Row должны быть только он сам и его предок itm(3), а узлы itm(1) и itm(0) не должны вхоиить так как они вошли уже в другую цепочку

Помогите это сделать
Спасибо
_________________
BTW: Put your finger on the Crux
flax
Аспирант

Зарегистрирован: 31.01.2003
Сообщения: 100
Откуда: Minsk
[4957] Пт Сен 05, 2003 12:37
можно опознать
можно опрознать узел начиная с которого можно отсекать цепочку родителей
test="preceding-sibling::item"
если дает правду, значит дальше можно не просматривать
_________________
BTW: Put your finger on the Crux
flax
Аспирант

Зарегистрирован: 31.01.2003
Сообщения: 100
Откуда: Minsk
[4958] Пт Сен 05, 2003 13:02
изменил алгоритм
замучаю всех Smile : изменил алгоритм, подскажите может как узнать
preceding-sibling::parent::item
так ведь нельзя писать
_________________
BTW: Put your finger on the Crux
alef
Новичок

Зарегистрирован: 30.07.2002
Сообщения: 30
Откуда: Москва
Посетить сайт автора
[4960] Пт Сен 05, 2003 17:00
Re: изменил алгоритм
Насколько я понял, надо проверить, что у родителя есть хотя бы один предшествующий близнец:

Код:

>cat a.xml
<a>
<b/>
 <c>
  <d/>
  <e>
   <f/>
  </e>
 </c>
</a>

>cat a.xsl
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="text" encoding="koi8-r"/>
<xsl:template match="*" >
        <xsl:if test="parent::*[1]/preceding-sibling::*[1]">
                <xsl:value-of select="concat(local-name(.),' ')"/>
        </xsl:if>
        <xsl:apply-templates select="*"/>
</xsl:template>
</xsl:stylesheet>

>xsltproc a.xsl a.xml
d
e
f