В вашем текущем коде ваш $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 и выбирается проверяемый узел.