powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Сравнение значений в тегах
9 сообщений из 9, страница 1 из 1
Сравнение значений в тегах
    #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
Сравнение значений в тегах
    #34370640
andrei77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
первая мысль у меня такая:
count(выбираем дочерние элементы teg, атрибут которого in)
то есть

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

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

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


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

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

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

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

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


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