我尝试用groovy迭代xml文件来获取一些值,我发现很多人都有同样的问题,但是他们的解决方案对我不起作用,或者太复杂了,我不是一个groovy开发人员,所以我需要一个我可以实现的防弹解决方案。
基本上,我有一个XML响应文件,看起来像这样:(看起来很糟糕,但这就是我得到的)
<Body>
<head>
<Details>
<items>
<item>
<AttrName>City</AttrName>
<AttrValue>Rome</AttrValue>
</item>
<item>
<AttrName>Street</AttrName>
<AttrValue>Via_del_Corso</AttrValue>
</item>
<item>
<AttrName>Number</AttrName>
<AttrValue>34</AttrValue>
</item>
</items>
</Details>
</head>
</Body>
我已经尝试过这个解决方案,我发现在这里StackOverflow打印的值:
def envelope = new XmlSlurper().parseText("the xml above")
envelope.Body.head.Details.items.item.each(item -> println( "${tag.name}") item.children().each {tag -> println( " ${tag.name()}: ${tag.text()}")} }
我得到的最好的结果就是
ConsoleScript11$_run_closure1$_closure2@2bfec433
ConsoleScript11$_run_closure1$_closure2@70eb8de3
ConsoleScript11$_run_closure1$_closure2@7c0da10
Result: CityRomeStreetVia_del_CorsoNumber34
我还可以删除第一个println之后的所有内容,以及它内部的所有内容,结果是相同的
我在这里的主要目标不是打印这些值,而是从XML中推断出这些值,并将它们保存为字符串变量...我知道使用字符串不是最佳实践,但我现在只需要理解一下。
1条答案
按热度按时间y0u0uwnf1#
您的代码有两个缺陷:
1.使用
envelope.Body
,您将找不到任何内容1.如果修复第1个问题,您将遇到
each(item -> println( "${tag.name}")
的多个编译错误。此处使用(
而不是{
,并且您使用了未定义的tag
变量。工作代码如下所示:
并打印: