2012-10-30 20 views
7

我在使用Soap UI中的MockOperation編輯器時遇到了問題。如何使用SOAP UI的Query_Match

我有這樣的要求:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> 
    <s:Body> 
    <methodName xmlns="http://tempuri.org/" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> 
     <dataAreaId>error</dataAreaId> 
     <pInvoiceList> 
     <dataAreaId>NOTTHESAME</dataAreaId> 
     ... 
     </pInvoiceList> 
    </methodName> 
    </s:Body> 
</s:Envelope> 

我試過幾乎每一個XPATH表達,但我總是得到「缺少比賽中請求」

什麼填補了Xpath的盒子?

我嘗試:

  • // dataAreaId /文本()
  • // dataAreaId/
  • // dataAreaId
  • /dataAreaId /文本()
  • /dataAreaId
  • /methodName/dataAreaId/text()
  • /methodName/dataAreaId/
  • /方法名/ dataAreaId
+0

你想要節點,所有節點的名稱,還是節點中的文本?另外,以'/'結尾的XPath無效。 – JWiley

+0

我想要第一個的文字 – amaters

回答

11

我終於設法得到它的基礎上的答案從user1740631

我似乎它與命名空間做的畢竟。

正確的語法:

+0

是的,就是這樣。很煩人,他們的網站不給這個提示。我的XML結果不包含名稱空間前綴,但它仍然需要我按照上面的建議創建虛擬名稱空間。 – djangofan

4

寫這樣

對於首先一個

//方法名[1]/dataAreaId [1]

對於第二個

// methodName [1]/pInvoiceList [1]/dataAreaId [1]

*如果您有多個節點在Xml中的名稱,那麼你應該使用數字來定位該特定的節點。

+0

試過這個。仍然沒有結果。這可能是因爲缺少命名空間還是我在這裏暗示一些非常愚蠢的東西? – amaters

+1

你應該在寫xpath之前總是定義命名空間..... – pshekhar

0

有一個很好的提示:當(在實體模型窗口或也許還),其限定一個斷言用於測試用例有一個按鈕「聲明」的XPath的表達上述-領域。它看起來並不像一個按鈕,除非你用鼠標指向它,所以我一開始並沒有意識到它。

只需點擊按鈕,SoapUI(實際上我使用5.2.1)將爲您添加聲明語句,您可以使用它。

我發現該功能巧合,因爲它不是真的可見。也許這也可以幫助...

2

如果你不關心的命名空間,你可以使用下面的語法:

XPath1.0

//*[local-name() = 'methodName']/*[local-name() = 'dataAreaId'][1] 

XPath2。0

//*:methodName/*:dataAreaId[1]