我从我正在呼叫的服务中得到此回复。我希望在Soap-UI中编写一个断言来验证<Result>
标记的值。
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<ServiceResponse> <!--Issue happens here when xmlns attribute is present-->
<ServiceResult xmlns:a="http://schemas.datacontract.org/2004/07/services.api.DataContracts" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<AdditionalInfo i:nil="true"/>
<ErrorMessage/>
<ErrorMessageId i:nil="true"/>
<ErrorMessages xmlns:b="http://schemas.microsoft.com/2003/10/Serialization/Arrays"/>
<InternalId>0</InternalId>
<RecordsAffected>0</RecordsAffected>
<Result>false</Result>
<WarningMessages xmlns:b="http://schemas.microsoft.com/2003/10/Serialization/Arrays"/>
<a:ReturnBase>
</a:ReturnBase>
</ServiceResult>
</ServiceResponse>
</s:Body>
</s:Envelope>
我使用Xpath Testing tool online找到正确的路径。当我删除<ServiceResponse>
标记上的xmlns属性时,XPATH按预期工作。但是,如果xmlns="http://schema.Services"
标记上有<ServiceResponse>
,则XPath无法返回项目。
我也尝试在Notepad ++中使用XML Tools插件找到它,当我在那里<ServiceResponse xmlns="http://schema.Services">
时会抛出异常。
我怎样才能在soap-UI中编写这个断言?
答案 0 :(得分:0)
XML命名空间的概念是您可以为它们分配任意前缀。
因此,如果您的XML使用默认命名空间,您只需为它构成一个前缀:
declare namespace s='http://schemas.xmlsoap.org/soap/envelope/';
declare namespace serv='http://schema.Services';
/s:Envelope/s:Body/serv:ServiceResponse/serv:ServiceResult/serv:Result[. = 'false']
答案 1 :(得分:0)
SoapUI使用Saxon XPath / XQuery处理器,因此您拥有XPath 2.0。 XPath 2.0的一个好处是名称空间通配符,所以你可以这样做:
/*:Envelope/*:Body/*:ServiceResult