如何定义名称空间

时间:2017-01-24 16:11:50

标签: groovy soapui

我有三个XML文件

XML 1

<h:table xmlns:h="http://www.w3.org/TR/html/">
  <h:tr>
    <h:td>Apples</h:td>
    <h:td>Bananas</h:td>
  </h:tr>
</h:table>

XML 2

<h:table xmlns:h="http://www.w3.org/TR/html2/">
  <h:tr>
    <h:td>Apples</h:td>
    <h:td>Bananas</h:td>
  </h:tr>
</h:table>

XML 3

<h:table xmlns:h="http://www.w3.org/TR/html3/">
  <h:tr>
    <h:td>Apples</h:td>
    <h:td>Bananas</h:td>
  </h:tr>
</h:table>

依赖于请求中的命名空间我必须在响应之间切换 如何定义命名空间?

case namespace = <h:table xmlns:h="http://www.w3.org/TR/html/">:
    return "Response 1";

1 个答案:

答案 0 :(得分:0)

您可以使用XmlHolder迭代请求的DOM树。它提供了方法getDomNode来通过XPath查询元素。然后返回节点的getNamespaceURI提供您要查找的命名空间字符串:

// create XmlHolder for request content
def holder = new com.eviware.soapui.support.XmlHolder( mockRequest.requestContent )
// XPath search for the element and then match its namespace
switch (holder.getDomNode( "//h:table" ).getNamespaceURI()) {
    case ~/http:\/\/www.w3.org\/TR\/html\//:
        return "Response 1"
    case ~/http:\/\/www.w3.org\/TR\/html2\//:
        return "Response 2"
    case ~/http:\/\/www.w3.org\/TR\/html3\//:
        return "Response 3"
}