XQuery - получить только значение запроса - PullRequest
0 голосов
/ 07 июня 2018

Я очень новичок в XQUERY ...

У меня есть элемент из XML-файла, подобный этому:

 <element field="SQL" name="QUERY" value="INSERT INTO tableB SELECT * FROM tableA;"/>

И я использую XQuery для того, чтобы получитьзапросы, которые имеют INSERT INTO.Итак, из моего XML-файла я получаю это:

SELECT * FROM tableA

Я пытаюсь с помощью этого кода получить это:

for $x in doc("C:\XXXXX.item")
where matches($x, "INSERT INTO$") = true()
return $x/element

Но это не дает мне никакого результата: (

Как получить желаемый результат?

Большое спасибо

1 Ответ

0 голосов
/ 07 июня 2018

В вашем текущем коде ваш $x является последовательностью одного документа, и ваше предложение WHERE оценивает, соответствует ли вычисленное текстовое значение этого документа (которое не включает значения атрибута) шаблону регулярных выражений.

Вместо этого вы захотите перебрать последовательность всех атрибутов в документе, проверить, содержат ли эти атрибуты оператор SQL, а затем вернуть элемент, к которому присоединены соответствующие атрибуты.

Вы можете настроить свой XQuery FLWOR на:

for $x in doc("C:\XXXXX.item")//@*
where matches($x, "INSERT INTO.*"))
return $x/..

Или просто написать как XPath с предикатами:

doc("C:\XXXXX.item")//*[@*[ matches(., "INSERT INTO.*")]]

XPath использует ось-потомок // длявыберите все элементы, используя селектор элементов *, затем фильтр предикатов оценивает, соответствуют ли какие-либо атрибуты элемента регулярному выражению SQL, выбрав все атрибуты с помощью @*, а затем протестировав каждый из них с собственным фильтром предикатов.Если предикаты выбирают хотя бы один элемент, они оцениваются как true и выбирается проверяемый узел.

...