Groovy-XmlSlurper-count节点

Groovy-XmlSlurper-count节点,groovy,counting,xmlslurper,Groovy,Counting,Xmlslurper,我是Groovy的新手,最近我需要计算给定XML数据块的复杂性 我找到了一种确定数据块是否为XML格式的方法。但我不知道如何计算给定XML块的所有节点 这是我的密码: def invoke(msg) { try { contentBody = msg.get("my.message"); new XmlSlurper().parseText(contentBody); Trace.debug("XML is we

我是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;
     }      
     }
非常感谢

干杯,
文森特,你试过以下方法吗


新建XmlSlurper().parseText(…).depthFirst().size()

您尝试过以下方法吗


新的XmlSlurper().parseText(…).depthFirst().size()

因此,问题有两个方面

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

假设您的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> 
当XML正确时。它给出以下输出

请注意
如果您提供了错误的xpath,那么也可能会因此产生异常。因此,不一定是无效的XML。但是e i.e异常详细信息将帮助您了解问题


我觉得使用xmlHolder和XMLParser/XMLSlurper都很容易,所以有两个问题

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

假设您的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> 
当XML正确时。它给出以下输出

请注意
如果您提供了错误的xpath,那么也可能会因此产生异常。因此,不一定是无效的XML。但是e i.e异常详细信息将帮助您了解问题

我觉得使用xmlHolder比使用XMLParser/XMLSlurper更容易

 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
   }