【问题标题】:Groovy - XmlSlurper - count nodeGroovy - XmlSlurper - 计数节点
【发布时间】:2018-09-30 21:12:53
【问题描述】:

我是 Groovy 的新手,最近我需要计算给定 XML 数据块的复杂度。

我想出了一种方法来确定数据块是否为 XML 格式。但我不确定如何计算给定 XML 块的所有节点。

这是我的代码:

    def invoke(msg)        
    { 
    try {
       contentBody = msg.get("my.message");
       new XmlSlurper().parseText(contentBody);
       Trace.debug("XML is well formed, request body is "  + contentBody);
       return true;
    }

    catch (Exception e){
        Trace.error("Invalid xml, request body is " + contentBody);
            return false;
     }      
     }

非常感谢。

干杯, 文森特

【问题讨论】:

    标签: groovy counting xmlslurper


    【解决方案1】:

    您是否尝试过以下方法?

    new XmlSlurper().parseText(...).depthFirst().size()

    【讨论】:

      【解决方案2】:

      所以问题中有两件事

      1) 检查xml是否有效 2)统计某个Node下的节点个数

      假设您的 xml 格式不正确(注意: 标签中缺少 >

      <note>
      <to>Tove</to>
        <from
          <test>121</test>
           <testing>123</testing>
         </from>
       <heading>Reminder</heading>
      <body>Don't forget me this weekend!</body>
      </note> 
      

      那么输出是这样的

      Mon Oct 01 08:34:54 IST 2018: ERROR: Invalid XML
      Mon Oct 01 08:34:54 IST 2018: ERROR: org.apache.xmlbeans.XmlException: error: Unexpected character encountered (lex state 10): '<'
      

      这里是代码

       def groovyUtils = new com.eviware.soapui.support.GroovyUtils(context)
      
       try
      {
       def xmlHolder = groovyUtils.getXmlHolder("RequestName#Request")
       def countofRoot = xmlHolder.getDomNodes("//*").size()
       def countofbelowNodes = xmlHolder.getDomNodes("//*:from/*").size()
      
        log.info "size of XML is " + countofRoot
        log.info "size of XML is " + countofbelowNodes
      
         }
        catch(Exception e)
        {
         log.error "Invalid XML"
          log.error e
         }
      

      当 XML 正确时。它给出了以下输出

      请注意,如果您提供了错误的 xpath,那么也会因此而出现异常。所以它没有必要是一个无效的 XML。但是 e 即异常详细信息将帮助您了解问题

      我觉得xmlHolder和XMLParser/XMLSlurper好用

      【讨论】:

        猜你喜欢
        • 2014-09-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-20
        • 1970-01-01
        • 1970-01-01
        • 2016-05-04
        • 2011-11-25
        相关资源
        最近更新 更多