对于未格式化的xml,Groovy XML Holder返回null

时间:2015-01-06 05:41:52

标签: xml xml-parsing soapui

我正在使用xmlholder检索xml标记,但它没有使用未格式化的xml。

def holder = groovyUtils.getXmlHolder(mockRequest.requestContent);
holder.declareNamespace("ns2", "http://example.com")

if(holder.getNodeValue('//ns2:GetCustomerInfo')!=null){
println true
}

格式化的xml:

<?xml version='1.0' encoding='UTF-8'?>
<S:Envelope xmlns:S="http://www.w3.org/2003/05/soap-envelope">
   <S:Header>
   </S:Header>
   <S:Body>
      <ns2:GetCustomerInfo xmlns:ns2="http://example.com">
         <ns2:Identifier>4111119876543210</ns2:Identifier>
      </ns2:GetCustomerInfo>
   </S:Body>
</S:Envelope>

如果xml未格式化并且作为一个行字符串给出,我就不会成功。

<?xml version='1.0' encoding='UTF-8'?><S:Envelope xmlns:S="http://www.w3.org/2003/05/soap-envelope"><S:Header></S:Header><S:Body><ns2:GetCustomerInfo xmlns:ns2="http://example.com"><ns2:Identifier>4111119876543210</ns2:Identifier></ns2:GetCustomerInfo></S:Body></S:Envelope>

实际上我需要从未格式化的xml中检索值,因为我将获取未格式化的数据。

1 个答案:

答案 0 :(得分:1)

您的代码按预期工作!

  1. In,你在说什么,&#34;格式化的案例&#34;节点的 GetCustomerInfo是换行符和一些空格,因此不是null
  2. 在您的&#34;无格式案例&#34;中,节点的 GetCustomerInfo没什么,所以它是null
  3. 为了证明这一点,您可以在GetCustomerInfo节点之后的无格式字符串中插入单个空格字符,然后再次运行测试。

    您可能希望尝试使用getDomNode()代替getNodeValue()来获取您要查找的行为。