Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Сравнение значений в тегах / 9 сообщений из 9, страница 1 из 1
05.03.2007, 08:17
    #34370215
SuSa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение значений в тегах
Всем привет. Есть такая конструкция
<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> их имена
...
Рейтинг: 0 / 0
05.03.2007, 11:07
    #34370640
andrei77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение значений в тегах
первая мысль у меня такая:
count(выбираем дочерние элементы teg, атрибут которого in)
то есть

*//[count(teg[@as='in'])]

а чтобы проверить совпадают ли имена я бы попробовал пройтись по param через teg, передавая в качестве параметра number и номер элемента param сравнивая их... а если закончатся param то выходил бы...
...
Рейтинг: 0 / 0
05.03.2007, 13:15
    #34371207
SuSa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение значений в тегах
По поводу *//[count(teg[@as='in'])],
правильней будет:
//[count(teg[@as='in'])]
По поводу твоего 2-го коментария:
есть несколько неувязочек
1. Кол-чво заранее не изветсно (ну это еще куда не шло)
2. Их порядок м.б. любой, то есть кол-во совпадает, имена тоже а порядок следования нет, и если идти и сравнивать по одному элементу, выдадим ошибку в верной комбинации, надо думать (возможно сортировка)
3.Находясь в одном шаблоне ты можешь получить значения токо этого шаблона, как же их можно сравнить со значением шаблона , который еще не обработан? (как осуществить передачу значений и на каком этапе их сравнивать?)
...
Рейтинг: 0 / 0
05.03.2007, 13:39
    #34371298
andrei77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение значений в тегах
автор1. Кол-чво заранее не изветсно (ну это еще куда не шло)

Ну да, помоему это вообще не важно... организуем цикл, ходим по ним, как заканчиваются выходим.


автор2. Их порядок м.б. любой, то есть кол-во совпадает, имена тоже а порядок следования нет, и если идти и сравнивать по одному элементу, выдадим ошибку в верной комбинации, надо думать (возможно сортировка)

ну если позиции их не совпадают то я думаю, что придется просто брать первый элемент param одного из teg и сравнивать их со всеми param другого teg, тогда как найдется берем следующий param и так далее пока они не закончатся. тут ещё замечу, если во втором teg есть param которых нет в первом, ну тогда можно просто в конце сверить ... то есть в одном teg - закончились, а закончились ли во втором? ну если условие жесткое.

автор3.Находясь в одном шаблоне ты можешь получить значения токо этого шаблона, как же их можно сравнить со значением шаблона , который еще не обработан? (как осуществить передачу значений и на каком этапе их сравнивать?)

шаблон он я думаю должен быть один главный.
потом запускаем следующий, уже именованый с параметрами
в этом шаблоне запущеном берем первый элемент такогото teg и начинаем сравнение... потом выдаем результат...

мой такой подход основывается исключительно на именованных шаблонах, потомучто я вот не давно с нимим познакомился, а может есть и проще способ это сделать... потому как на первый особенно взгляд рекурсии - это замарочено... хотя мне кажется много чего можно ими наворотить:))
...
Рейтинг: 0 / 0
05.03.2007, 14:10
    #34371423
SuSa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение значений в тегах
Ага :) виделя я чего ты с рекурсией вытворяешь
По поводу определить колич. параметров в тегах, я решил какэто можно сделать!!!! блин убил два выходных..
решение

<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>
...
Рейтинг: 0 / 0
05.03.2007, 14:12
    #34371432
SuSa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение значений в тегах
Теперь решаю проблему с соответствием имен
ВАши мысли, как это можно сделать :)
...
Рейтинг: 0 / 0
05.03.2007, 15:25
    #34371705
andrei77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение значений в тегах
Я бы сделал что нить такое

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
все остальные оставить такимиже


ну примерно моя линия такая, не знаю подойдет ли
...
Рейтинг: 0 / 0
05.03.2007, 15:50
    #34371789
SuSa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение значений в тегах
Не считая ошибки
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"
буду думать
...
Рейтинг: 0 / 0
13.03.2007, 13:33
    #34387069
SuSa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнение значений в тегах
SuSa2. Если количество совпадает, сравнить совпадают ли в <param> их имена
вопрос решен, вот ответ
http://www.sql.ru/forum/actualthread.aspx?tid=404009
...
Рейтинг: 0 / 0
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Сравнение значений в тегах / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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