powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Поиск по нескольким признакам
22 сообщений из 22, страница 1 из 1
Поиск по нескольким признакам
    #37756115
Михаил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет,

я понимаю как написать "найти такие А, для которых существуют такие В, что у них равны Name" (//A[//B/Name/text()=Name.text()]).

А что делать, если я хочу найти по одинаковым двут полям?
Например, Name1 и Name2.
...
Рейтинг: 0 / 0
Поиск по нескольким признакам
    #37756183
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что за загадочное определение "для которых"? Нет в xml такого. Есть потомки, родители и сиблинги.
Пример нужен.
...
Рейтинг: 0 / 0
Поиск по нескольким признакам
    #37756240
Михаил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня в документе два списка.
Объекты первого ссылаются на объекты второго.
Надо найти все объекты второго, на которые есть хотя бы одна ссылка.

Вариант на случай если ссылка сделана одним значением я уже написал.
Но у меня ссылка - это два поля...
...
Рейтинг: 0 / 0
Поиск по нескольким признакам
    #37756249
Михаил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
<root>
<List1>
<B>
<A_REF_Name1>123</A_REF_Name1>
<A_REF_Name2>234</A_REF_Name2>
</B>
</List1>
<List2>
<A>
<Name1>123<Name1>
<Name2>234<Name2>
</A>
<A>
<Name1>567<Name1>
<Name2>678<Name2>
</A>
</List2>
</root>

Требуемый результат: первый элемент А (только на него есть ссылка).
...
Рейтинг: 0 / 0
Поиск по нескольким признакам
    #37756251
Михаил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чёрт, отступы пропали...
...
Рейтинг: 0 / 0
Поиск по нескольким признакам
    #37756874
Михаил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пытаюсь соеденить два поля в одно, но ругается на то как я использую concat в левой части равенства...

Код: xml
1.
"//A[//B/concat(A_REF_Name1/text(),A_REF_Name2/text()) = concat(Name1/text(),Name2/text())]"
...
Рейтинг: 0 / 0
Поиск по нескольким признакам
    #37757009
mage.lan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Михаил,

Код: sql
1.
//A[//B/A_REF_Name1/text()=Name1/text() and //B/A_REF_Name2=Name2/text()]



только //B лучше вынести в переменную... хотя для оптимизации надо видеть ваш xml и его объем. возможно, что приведенный выше xPath будет вообще неприемлем.
...
Рейтинг: 0 / 0
Поиск по нескольким признакам
    #37757013
mage.lan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mage.lan,

торможу.


Код: sql
1.
//A[//B[A_REF_Name1/text()=Name1/text() and A_REF_Name2/text()=Name2/text()]]


надо пробывать, может нужна такая нотация:
Код: sql
1.
//A[//B[A_REF_Name1/text()=current()/Name1/text() and A_REF_Name2/text()=current()/Name2/text()]]
...
Рейтинг: 0 / 0
Поиск по нескольким признакам
    #37757024
mage.lan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
еще мысли на тему:
Код: sql
1.
//A[ normalize-space(//B/*[starts-with(name(), 'A_REF_Name')]/text())=normalize-space(*[starts-with(name(), 'Name')]/text())]
...
Рейтинг: 0 / 0
Поиск по нескольким признакам
    #37757100
Михаил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mage.lanmage.lan,

торможу.


Код: sql
1.
//A[//B[A_REF_Name1/text()=Name1/text() and A_REF_Name2/text()=Name2/text()]]


надо пробывать, может нужна такая нотация:
Код: sql
1.
//A[//B[A_REF_Name1/text()=current()/Name1/text() and A_REF_Name2/text()=current()/Name2/text()]]



Похоже, мы все-таки остаемся в контексте В, то есть не можем ссылаться на поля А...
...
Рейтинг: 0 / 0
Поиск по нескольким признакам
    #37757107
Михаил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а можно ли вообще в контексте определенного В склеить его поля (concat)?

Ругается на //B/concat(...

Так в принципе нельзя?
...
Рейтинг: 0 / 0
Поиск по нескольким признакам
    #37757115
mage.lan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Михаила можно ли вообще в контексте определенного В склеить его поля (concat)?

Ругается на //B/concat(...

Так в принципе нельзя?
нет. так нельзя. конкат - xPath функция. в пути могут быть только оси ну и current, node, text.

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

пытаюсь заставить работать.
...
Рейтинг: 0 / 0
Поиск по нескольким признакам
    #37757183
Михаил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mage.lan,

почему-то работает только если ссылка стоит в первом элементе списка В.
...
Рейтинг: 0 / 0
Поиск по нескольким признакам
    #37757321
Михаил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: xml
1.
normalize-space(//B/*[starts-with(name(), 'A_REF_Name')]/text())



я попробовал переписать это с помощью string:

Код: xml
1.
//A[string(//B)=string()]



результат тот же: внутри функции берется первый элемент (а не перебираются все возможные)
...
Рейтинг: 0 / 0
Поиск по нескольким признакам
    #37757644
Михаил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но все зависимости от способа спаривания строк, неужели такая ерунда не решается как-то стандартно и чисто?
...
Рейтинг: 0 / 0
Поиск по нескольким признакам
    #37757908
mage.lan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Михаил,

string там не нужен текст и так типа "строка".

возможно надо писать так:
Код: sql
1.
normalize-space(//B/*[starts-with(name(), 'A_REF_Name')]//text())


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

я тестирую вот на чем:

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
<root>
<List1>
<B>
 <A_REF_Name1>567</A_REF_Name1>
 <A_REF_Name2>567</A_REF_Name2>
 </B>
<B>
 <A_REF_Name1>123</A_REF_Name1>
 <A_REF_Name2>234</A_REF_Name2>
 </B>
 </List1>
<List2>
<A>
 <Name1>123</Name1>
 <Name2>234</Name2>
 </A>
<A>
 <Name1>567</Name1>
 <Name2>678</Name2>
 </A>
 </List2>
 </root>



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

на xPath 1.0 не решается. Он действительно не хочет весь текст отдавать (вероятно оптимизация трансформера).

решение на XSL выглядет так:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
	<html>
	<head>
		<title>test</title>
	</head>
	<body>
		<xsl:variable name="B" select="/root/List1/B" />
		<xsl:for-each select="/root/List2/A">
			<xsl:if test="$B[ A_REF_Name1 = current()/Name1 and A_REF_Name2 = current()/Name2]">
				[<xsl:value-of select="*" />]
				

			</xsl:if>
		</xsl:for-each>
	</body>
	</html>
</xsl:template>
</xsl:stylesheet>



вы на чем пытаетесь коллекцию получить?
...
Рейтинг: 0 / 0
Поиск по нескольким признакам
    #37758907
Михаил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mage.lanвы на чем пытаетесь коллекцию получить?

Отлично, большое спасибо!
Я пытался как раз xslt построить.

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

Отлично, большое спасибо!
Я пытался как раз xslt построить.

А на XPath 2.0 это становится возможным?
Аналогично циклом?

не важно. что это будет цикл или аплай-темплейтс.
xPath 2 позволяет фильтровать выборки в одном xPath выражении, вероятно на этом можно сыграть.
Но я xPath 2 знаю чисто академически, никаких проектов на нем не делал, даже трансформера под рукой нет, чтобы попробывать.
...
Рейтинг: 0 / 0
Поиск по нескольким признакам
    #37760761
Михаил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mage.lan,

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


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