对于每个XML节点<suite>,<TestSuites>我如何获取<suite><name>使用Groovy的文本值



我在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]

最新更新