我在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}"
}
我正在尝试遍历<suites>
中的每个<suite>
,并为每个套件获取运行的测试套件的<name>
。我认为这将非常容易,但显然 groovy 对任何类型的集合都使用了一些特殊的语法,至少对我来说,这实际上非常困难。
我尽力阅读了这里的文档:https://groovy-lang.org/processing-xml.html#_simply_traversing_the_tree
并试图以他们的榜样为基础,但我真的无法得到任何东西,只是给我想要的我想要。
我在这里为这个问题制作了一个时髦的控制台:https://groovyconsole.appspot.com/script/5074191896281088
我真的已经玩了几个小时,试图弄清楚它。请发送帮助。
您有一些非打印字符,代码为 63,紧跟在masterXml.suites
之后。
你可以这样看:
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]