|
|
|
Сравнение значений в тегах
|
|||
|---|---|---|---|
|
#18+
Всем привет. Есть такая конструкция <root> <teg number="1" as="in"> <param name="1"/> <param name="2"/> </teg> <teg number="2" as="in"> <param name="2"/> <param name="3"/> </teg> <teg number="3" as="out"> <param name="1"/> <param name="3"/> </teg> </root> 1. Как сравнить совпадает ли количество <param> в <teg> чъе значение атрибута совпадает,в данном случаи as="in" 2. Если количество совпадает, сравнить совпадают ли в <param> их имена ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2007, 08:17 |
|
||
|
Сравнение значений в тегах
|
|||
|---|---|---|---|
|
#18+
первая мысль у меня такая: count(выбираем дочерние элементы teg, атрибут которого in) то есть *//[count(teg[@as='in'])] а чтобы проверить совпадают ли имена я бы попробовал пройтись по param через teg, передавая в качестве параметра number и номер элемента param сравнивая их... а если закончатся param то выходил бы... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2007, 11:07 |
|
||
|
Сравнение значений в тегах
|
|||
|---|---|---|---|
|
#18+
По поводу *//[count(teg[@as='in'])], правильней будет: //[count(teg[@as='in'])] По поводу твоего 2-го коментария: есть несколько неувязочек 1. Кол-чво заранее не изветсно (ну это еще куда не шло) 2. Их порядок м.б. любой, то есть кол-во совпадает, имена тоже а порядок следования нет, и если идти и сравнивать по одному элементу, выдадим ошибку в верной комбинации, надо думать (возможно сортировка) 3.Находясь в одном шаблоне ты можешь получить значения токо этого шаблона, как же их можно сравнить со значением шаблона , который еще не обработан? (как осуществить передачу значений и на каком этапе их сравнивать?) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2007, 13:15 |
|
||
|
Сравнение значений в тегах
|
|||
|---|---|---|---|
|
#18+
автор1. Кол-чво заранее не изветсно (ну это еще куда не шло) Ну да, помоему это вообще не важно... организуем цикл, ходим по ним, как заканчиваются выходим. автор2. Их порядок м.б. любой, то есть кол-во совпадает, имена тоже а порядок следования нет, и если идти и сравнивать по одному элементу, выдадим ошибку в верной комбинации, надо думать (возможно сортировка) ну если позиции их не совпадают то я думаю, что придется просто брать первый элемент param одного из teg и сравнивать их со всеми param другого teg, тогда как найдется берем следующий param и так далее пока они не закончатся. тут ещё замечу, если во втором teg есть param которых нет в первом, ну тогда можно просто в конце сверить ... то есть в одном teg - закончились, а закончились ли во втором? ну если условие жесткое. автор3.Находясь в одном шаблоне ты можешь получить значения токо этого шаблона, как же их можно сравнить со значением шаблона , который еще не обработан? (как осуществить передачу значений и на каком этапе их сравнивать?) шаблон он я думаю должен быть один главный. потом запускаем следующий, уже именованый с параметрами в этом шаблоне запущеном берем первый элемент такогото teg и начинаем сравнение... потом выдаем результат... мой такой подход основывается исключительно на именованных шаблонах, потомучто я вот не давно с нимим познакомился, а может есть и проще способ это сделать... потому как на первый особенно взгляд рекурсии - это замарочено... хотя мне кажется много чего можно ими наворотить:)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2007, 13:39 |
|
||
|
Сравнение значений в тегах
|
|||
|---|---|---|---|
|
#18+
Ага :) виделя я чего ты с рекурсией вытворяешь По поводу определить колич. параметров в тегах, я решил какэто можно сделать!!!! блин убил два выходных.. решение <xsl:template match="teg[@as]" mode="do"> <xsl:variable name="a" select="@as"/> <xsl:variable name="d" select="@number"/> Name schablona=<xsl:value-of select="$a"/>; <xsl:variable name="b" select="count(param)"/> param in schablone=<xsl:value-of select="$b"/>;& #10; Кол-во шаблонов с таким же именем="<xsl:value-of select="count(//teg[@as=$a])"/>" <xsl:for-each select="//teg[@as=$a][@number!=$d]"> <xsl:variable name="c" select="count(param)"/> Колво параметров у сравнивемого с этим шаблона="<xsl:value-of select="$c"/>" <xsl:choose> <xsl:when test="$b=$c"> Pavno</xsl:when> <xsl:otherwise> ne ravno</xsl:otherwise> </xsl:choose> </xsl:for-each> </xsl:template> <xsl:template match="/"> <xsl:apply-templates mode="do"/> </xsl:template> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2007, 14:10 |
|
||
|
Сравнение значений в тегах
|
|||
|---|---|---|---|
|
#18+
Теперь решаю проблему с соответствием имен ВАши мысли, как это можно сделать :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2007, 14:12 |
|
||
|
Сравнение значений в тегах
|
|||
|---|---|---|---|
|
#18+
Я бы сделал что нить такое teg[$position1] - первый сравниваемый teg param[$position2] - нода param первого teg teg[$position3] второй сравниваемы teg param[$position4] - нода param второго teg xsl:template name="aaaa" 1. тут условие, если param[$position4] =true продолжаем, если false ... либо выходим совсем, либо запускаем этот именованный шаблон с $position2+1 (проверяем следующий param первого teg) 2. тут условие, если param[$position2] =true продолжаем, если false ... либо совсем выходим, либо можно проверить... остались ли во втором teg ещё param 3. xsl:if test="teg[$position1][@as='in']/param[$position2]/@number = teg[$position3][@as='in']/param[$position4]/@number" param[$position2] соответствует param[$position4] 3. /xsl:if> 3. call-template = aaaa with-param = $position4+1 все остальные оставить такимиже ну примерно моя линия такая, не знаю подойдет ли ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2007, 15:25 |
|
||
|
Сравнение значений в тегах
|
|||
|---|---|---|---|
|
#18+
Не считая ошибки andrei773. xsl:if test="teg[$position1][@as='in']/param[$position2]/@number = teg[$position3][@as='in']/param[$position4]/@number" Надо было : xsl:if test="teg[$position1][@as='in']/param[$position2]/@name = teg[$position3][@as='in']/param[$position4]/@name" буду думать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2007, 15:50 |
|
||
|
Сравнение значений в тегах
|
|||
|---|---|---|---|
|
#18+
SuSa2. Если количество совпадает, сравнить совпадают ли в <param> их имена вопрос решен, вот ответ http://www.sql.ru/forum/actualthread.aspx?tid=404009 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2007, 13:33 |
|
||
|
|

start [/forum/topic.php?fid=14&fpage=65&tid=1334405]: |
0ms |
get settings: |
12ms |
get forum list: |
18ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
83ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
2ms |
| others: | 245ms |
| total: | 430ms |

| 0 / 0 |
