我是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;
}
}
非常感谢。
干杯, 文森特
答案 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正确时。它给出以下输出
请注意,如果您输入了错误的xpath,则也会因此而导致异常。因此,不必使用无效的XML。但是,即异常详细信息将帮助您了解问题
我觉得使用xmlHolder和XMLParser / XMLSlurper都很容易