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

我是groovy的新手

试图解析某个xml请求,但有一段时间运气不佳

最后的结果是:

  • 我想检查xml请求“RequestRecords”是否具有“DetailsRequest”属性
  • 获取“RequestF”具有FieldName=“Id”的“FieldValue”编号
  • 此外,由于某些原因,我无法使用XmlSlurper,因为它将“def root=new XmlParser().parseText(xml)”返回false

    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'