Groovy XML Holder returns null for unformatted xml
Groovy XML Holder returns null for unformatted xml
我正在使用 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 中检索值,因为我要获取未格式化的数据。
您的代码按预期运行!
- 在,你所说的,"formatted case"节点的值
GetCustomerInfo
是一个换行符和一些白色space,所以它不是null
。
- 在你的"unformatted case"中,节点的值
GetCustomerInfo
什么都不是,所以它是 null
。
为了证明这一点,您可以在 GetCustomerInfo
节点之后的未格式化字符串中插入一个 space 字符,然后再次 运行 您的测试。
您可能想尝试使用 getDomNode()
而不是 getNodeValue()
来获得您正在寻找的行为。
我正在使用 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 中检索值,因为我要获取未格式化的数据。
您的代码按预期运行!
- 在,你所说的,"formatted case"节点的值
GetCustomerInfo
是一个换行符和一些白色space,所以它不是null
。 - 在你的"unformatted case"中,节点的值
GetCustomerInfo
什么都不是,所以它是null
。
为了证明这一点,您可以在 GetCustomerInfo
节点之后的未格式化字符串中插入一个 space 字符,然后再次 运行 您的测试。
您可能想尝试使用 getDomNode()
而不是 getNodeValue()
来获得您正在寻找的行为。