Groovy - XmlSlurper - 计数节点

Groovy - XmlSlurper - count node

我是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;
     }      
     }

非常感谢。

干杯, 文森特

您尝试过以下方法吗?

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

所以问题中有两件事

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 即异常详细信息将帮助您了解问题

我觉得好用xml持有然后XMLParser/XMLSlurper