Groovy xml请求解析
我是groovy的新手 试图解析某个xml请求,但有一段时间运气不佳 最后的结果是:Groovy xml请求解析,xml,groovy,namespaces,Xml,Groovy,Namespaces,我是groovy的新手 试图解析某个xml请求,但有一段时间运气不佳 最后的结果是: 我想检查xml请求“RequestRecords”是否具有“DetailsRequest”属性 获取“RequestF”具有FieldName=“Id”的“FieldValue”编号 此外,由于某些原因,我无法使用XmlSlurper,因为它将“def root=new XmlParser().parseText(xml)”返回false def env=newgroovy.xml.Namespace(“htt
def env=newgroovy.xml.Namespace(“http://schemas.xmlsoap.org/soap/envelope/“,‘env’”;
def ns0=new groovy.xml.Namespace(“http://tempuri.org/“,‘ns0’)
def xml=''
错误的
'''
def root=new XmlParser().parseText(xml)
println(“根”+根)
断言“根节点”==root.name()
println根节点
甚至根节点的断言也会失败。XmlSlurper或XmlParser都可以正常工作。从我看来,它们在功能上是等价的。它们只是在内存使用和性能上有所不同 看起来您是从javadoc中的示例中复制了这段代码,但没有意识到其中的一些部分是什么意思。显然,“根节点”的断言失败了,因为示例中的根节点的名称是“root_node”,但它是代码中的“信封”
不知道你为什么说XmlSlurper不工作。您使用它的代码示例甚至没有使用它。给定该XML,您可以使用XmlSlurper获得两个问题的答案,如下所示:
def root = new XmlSlurper().parseText(xml)
// I want to check if xml request "RequestRecords" has "DetailsRequest" atrribute
List<Boolean> hasAttribute = root.Body
.Request1
.Request_Sub
.RequestRecords
.collect { it.attributes().containsKey('DetailsRequest') }
assert hasAttribute == [false, false]
// Get "FieldValue" number where "RequestF" has FieldName="Id".
String value = root.Body
.Request1
.Request_Sub
.RequestRecords
.RequestF
.find { it.@FieldName == 'Id' }?.@FieldValue
assert value == '1487836040'
def root=new XmlSlurper().parseText(xml)
//我想检查xml请求“RequestRecords”是否具有“DetailsRequest”属性
List hasaAttribute=root.Body
.Request1
.请求
.请求记录
.collect{it.attributes().containsKey('DetailsRequest')}
assert hasAttribute==[false,false]
//获取“RequestF”具有FieldName=“Id”的“FieldValue”编号。
字符串值=root.Body
.Request1
.请求
.请求记录
.请求F
.find{it@FieldName=='Id'}?@FieldValue
断言值==“1487836040”
如果我理解正确,“hasAttribute”应该在找到短语时返回true,但不知怎的,它总是返回false,例如搜索“Details”、“.containsKey('Details')。“值搜索有效-谢谢。任何建议,为什么”。collect{it.attributes().containsKey..”不起作用?那么在这种情况下正确的断言应该是什么呢?断言root.name()=='Envelope'也失败了。在断言之前添加'println“root[${root.name}]”来验证它是什么很容易。它为我显示了“Envelope”。
def root = new XmlSlurper().parseText(xml)
// I want to check if xml request "RequestRecords" has "DetailsRequest" atrribute
List<Boolean> hasAttribute = root.Body
.Request1
.Request_Sub
.RequestRecords
.collect { it.attributes().containsKey('DetailsRequest') }
assert hasAttribute == [false, false]
// Get "FieldValue" number where "RequestF" has FieldName="Id".
String value = root.Body
.Request1
.Request_Sub
.RequestRecords
.RequestF
.find { it.@FieldName == 'Id' }?.@FieldValue
assert value == '1487836040'