我正在尝试使用XPath Match断言为SOAP UI中的测试步骤编写断言。我想检查REST服务的响应中是否定义了特定的名称空间URI。我正在尝试使用namespace-uri-for-prefix
和in-scope-prefixes(/other:element)
函数的组合,但我无法使其工作,所以也许有人有建议。
string-join(in-scope-prefixes(/other:element), ',')
给了我一个包含所有已定义的前缀的集合,我不能用
输出它in-scope-prefixes(/other:element)[namespace-uri-for-prefix(.,/my:rootElement)='http://namespaceuri.org/my']
所以在第一步中,我想要选择我正在寻找的命名空间URI的前缀
in-scope-prefixes(/other:element)[concat(.,'-') = 'my-']
但是SOAP UI给了我错误
无效的XPath表达式
现在我想知道那个表达式是否真的无效?像
这样的东西declare namespace other='http://namespaceuri.org/other';
let $rt := /other:rootElement
let $ret := exists(in-scope-prefixes($rt)[namespace-uri-for-prefix(.,$rt)='http://namespaceuri.org/my'])
return $ret
在不引发错误的情况下工作。我错过了什么吗?
EDIT1
我刚刚意识到我能够使用 XQuery 和
declare namespace other='http://namespaceuri.org/other';
let $ret := exists(in-scope-prefixes(/other:rootElement)[namespace-uri-for-prefix(.,/other:rootElement)='http://namespaceuri.org/my'])
return $ret
但这不起作用:
{{1}}
对于后者,SOAP UI提供了异常
无效的XQuery表达式
似乎行为与XPath相同,只是我可以在XQuery中使用变量。
这对任何人都有意义吗?知道如何使用XPath吗?