Groovy-XmlSlurper-计数节点

时间:2018-09-30 21:12:53

标签: groovy counting xmlslurper

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

非常感谢。

干杯, 文森特

2 个答案:

答案 0 :(得分:1)

您尝试过以下吗?

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

答案 1 :(得分:1)

所以这个问题有两件事

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> 

然后输出就像

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正确时。它给出以下输出

enter image description here

请注意,如果您输入了错误的xpath,则也会因此而导致异常。因此,不必使用无效的XML。但是,即异常详细信息将帮助您了解问题

我觉得使用xmlHolder和XMLParser / XMLSlurper都很容易