我在Groovy中有以下代码,在该代码中,我按照以下结构以XML进行了解析:
def xmlString = '''<?xml version="1.0" encoding="UTF-8"?>
<result plugin="junit@1.28">
<duration>8711.001</duration>
<keepLongStdio>false</keepLongStdio>
<build>null</build>
<suites>
<suite>
<name>JavaScript Tests</name>
<duration>5.331</duration>
<timestamp>2019-10-01T20:24:36Z</timestamp>
<id>0</id>
</suite>
<suite>
<name>Whatever</name>
<duration>5.331</duration>
<timestamp>2019-10-01T20:24:36Z</timestamp>
<id>2</id>
</suite>
</suites>
</result>'''
def masterXml = new XmlParser().parseText(xmlString)
masterXml.suites.'*'.each{ suite ->
def suiteName = suite
println "GIVE ME SUITE NAME REEEEEEEEEEEEE: ${suiteName}"
}
我正在尝试遍历<suite>
中的每个<suites>
,并为每个套件获取运行的测试套件的<name>
。我认为这将是非常容易的,但是显然groovy对于这是什么类型的集合都使用一些特殊的语法,至少对我而言,这实际上非常困难。
我竭尽全力在此处阅读文档:https://groovy-lang.org/processing-xml.html#_simply_traversing_the_tree
并尝试以他们的示例为基础,但是我真的无法做任何事情,只是给我我想要的。
我为此在此处制作了一个普通的控制台:https://groovyconsole.appspot.com/script/5074191896281088
而且我已经花了好几个小时试图找出答案。请发送帮助。
答案 0 :(得分:1)
在masterXml.suites
之后,您立即有一个代码63的非打印字符。
您可以通过以下方式看到它:
println "suites.'*'".bytes // [115, 117, 105, 116, 101, 115, 63, 46, 39, 42, 39]
您还需要获取name.text()
。工作版本(我用非印刷字符重新输入了该行):
def masterXml = new XmlParser().parseText(xmlString)
masterXml.suites.'*'.each{ suite ->
def suiteName = suite.name.text()
println "GIVE ME SUITE NAME REEEEEEEEEEEEE: ${suiteName}"
}
编辑:代码为63的字符应为问号。哪个应该是?.
运算符,所以应该是有效的Groovy。某些地方出现了一些编码问题。有趣的是,这给出了完全相同的字节序列:
println "suites?.'*'".bytes // [115, 117, 105, 116, 101, 115, 63, 46, 39, 42, 39]