powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / XPath выборка узлов по значениям полученным из других узлов
8 сообщений из 8, страница 1 из 1
XPath выборка узлов по значениям полученным из других узлов
    #38151011
TJ001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть вот такая структура
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
<n1>
 <n1-1>
   <n1-1a a1 = "1,2,3,4" a2="1">
     <n1-1-1a/>
   </n1-1a>

   <n1-1a a1 = "1,3,4" a2="2">
     <n1-1-1a/>
   </n1-1a>

   <n1-1a a1 = "" a2="3">
     <n1-1-1a/>
   </n1-1a>

   <n1-1b>
     <n1-1-1b-1  a1 = "{1,1,1}">
   </n1-1b>

   <n1-1b>
     <n1-1-1b  a1 = "{1,2,1}">
   </n1-1b>
 </n1-1>
</n1>



нужно выбрать все узлы <n1-1a>, в которых параметр a1(множество) содержит значение, к примеру "2" (есть вхождение) или не задан т.е. a1=""
далее нужно заглянуть в параметр a2 и включить в выборку все узлы <n1-1b>, где значение во второй позиции <n1-1-XXXb>.a1 совпадает со значением <n1-1a>.a2

т.е. результат в данном случае должен быть

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
скобками показаны поля удовлетворяющие условиям
   <n1-1a a1 = "1,(2),3,4" a2=("1")>
     <n1-1-1a/>
   </n1-1a>

   <n1-1a a1 = ("") a2="3">
     <n1-1-1a/>
   </n1-1a>

   <n1-1b>
     <n1-1-1b  a1 = "{1,(1),1}">
   </n1-1b>


первую часть выбираю вот так
Код: sql
1.
selectNodes("/n1/n1-1/n1-1a[contains(@a1,'2') or (@a1 = '')]")



надеюсь я правильно изложил задачу...
...
Рейтинг: 0 / 0
XPath выборка узлов по значениям полученным из других узлов
    #38153216
TJ001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в общем join получается мне нужен...
это возможно?
...
Рейтинг: 0 / 0
XPath выборка узлов по значениям полученным из других узлов
    #38153711
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробовать оператор | (объединение узлов)
...
Рейтинг: 0 / 0
XPath выборка узлов по значениям полученным из других узлов
    #38153773
mage.lan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TJ001в общем join получается мне нужен...
это возможно?задача отвратительная. Проще переделать xml чтобы из него все легко выбиралось.
...
Рейтинг: 0 / 0
XPath выборка узлов по значениям полученным из других узлов
    #38155036
TJ001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я несколько ограничен в изменении структуры, но могу добавить дополнительные атрибуты "a2" в узлы n1-1b, например так
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
<n1>
 <n1-1>
   <n1-1a a1 = "1,2,3,4" a2="1">
     <n1-1-1a/>
   </n1-1a>

   <n1-1a a1 = "1,3,4" a2="2">
     <n1-1-1a/>
   </n1-1a>

   <n1-1a a1 = "" a2="3">
     <n1-1-1a/>
   </n1-1a>

   <n1-1b>
     <n1-1-1b-1  a1 = "{1,1,1}" a2 ="1">
   </n1-1b>

   <n1-1b>
     <n1-1-1b  a1 = "{1,2,1}" a2="2">
   </n1-1b>
 </n1-1>
</n1>


это поможет?
...
Рейтинг: 0 / 0
XPath выборка узлов по значениям полученным из других узлов
    #38157293
mage.lan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TJ001,

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

Вашу задачу проще решить каким нибудь языком общего назначения, с использованием DOM Api, ну и частично XPath
...
Рейтинг: 0 / 0
XPath выборка узлов по значениям полученным из других узлов
    #38161663
sigmov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот так должно получиться:
Код: sql
1.
2.
3.
//n1-1a[(data(@a1)='') or matches(data(@a1),'(^|,)2(,|$)')]
union
//n1-1b[exists(index-of(..//n1-1a/@a2,*/@a1))]



Имхо структура данных у вас хуже некуда..... Такие запросы через Ж
...
Рейтинг: 0 / 0
XPath выборка узлов по значениям полученным из других узлов
    #38162168
mage.lan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sigmov,

только надо было бы сразу указать, что это не xPath 1.0
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / XPath выборка узлов по значениям полученным из других узлов
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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