Groovy - XmlSlurper - узел подсчета - PullRequest
0 голосов
/ 01 октября 2018

Я новичок в 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 голосов
/ 01 октября 2018

Итак, в вопросе есть 2 вещи

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

0 голосов
/ 01 октября 2018

Вы пробовали следующее?

новый XmlSlurper (). ParseText (...). DeepFirst (). Size ()

...