2013-04-05 2 views
1

У меня есть ответ SOAP, подобный этому:Как перебрать ответ SOAP в SoapUI с помощью XQuery?

<items> 
<item date="2009-10-02"> </item> 
<item date="2010-10-02"></item> 
<item date="2012-10-02"></item> 
</items> 

И мне нужно проверить с помощью XQuery и регулярное выражение у меня уже есть, если даты в каждом пункте есть правильный формат. Я пробовал итерацию, но он все время предупреждает меня: «В одном ответе« более одного совпадения ». Это то, что я уже пробовал:

let $items:= (//items) 
for $i in $items 
    return 1 

Спасибо!

+0

Ваш XML не правильно сформированным он пропустил закрывающие теги элементов. Пожалуйста, исправьте это! Это также облегчает другим решение, если вы предоставляете то, что вы уже используете. – IndoKnight

+0

Я исправил XML, но это не вопрос, очевидно, что это не мой реальный ответ SOAP. –

+0

В каком формате вы хотите получить даты? – IndoKnight

ответ

0

Если ваш процессор поддерживает запрос XQuery 3.0 и вы заинтересованы один совокупный результат для всех дат, используйте синтаксис «каждый-удовлетворяет» ,

every $date in //item/@date satisfies matches($date, '[-\d]+') 

Если процессор не поддерживает этот синтаксис, вы можете использовать что-то вроде этого:

not(//item/@date/matches(., '[-\d]+') != true()) 

Если он поддерживает только XQuery 1.0, возможно, потребуется, чтобы обернуть вокруг matches последовательности XPath:

not(matches(//item/@date, '[-\d]+') != true()) 

Если вы заинтересованы в индивидуальной ва сифилисе, используйте:

//item/@date/matches(., '[-\d]+') 

Или снова XQuery 1.0:

for $date in //item/@date 
return matches($date, '[-\d]+') 
0

я наконец-то нашел на собственном то, что работал:

for $z in //item[1] 
return matches($z/@date, 'regularexp') 
+1

Вы сказали, что вам нужно проверить, имеет ли _dates в каждом элементе правильный формат_, но вы проверяете только первую дату в этом запросе. –

Смежные вопросы