Автор |
Сообщение |
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
изменил алгоритм
замучаю всех : изменил алгоритм, подскажите может как узнать
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
|