我正在尝试使用 Groovy 解析以下 XML:
<list>
<list>
<widget>
<fizz id="3" />
<buzz>false</buzz>
<explanations/>
</widget>
<widget>
<fizz id="3" />
<buzz>true</buzz>
<explanations>
<string>What is the meaning of life?</string>
<string>I like the color blue.</string>
</explanations>
</widget>
<widget>
<fizz id="45" />
<buzz>true</buzz>
<explanations>
<string>I could really go for some pizza right now.</string>
</explanations>
</widget>
</list>
</list>
如果一个<widget/>元素有一个true <buzz/>子元素,那么它将开始将所有explanations/string子元素聚合到一个主元素中List<String>。因此,给定上面的示例 XML,它将具有以下行为:
- 首先
list/list/widget/buzz是false,所以不要做任何事情 - 二
list/list/widget/buzz是true,所以搞字符串聚合模式:- 第二个
list/list/widget/explanations有2个<string/>孩子;将它们都添加到主列表 (masterList)
- 第二个
- 第三
list/list/widget/buzz是true,所以继续将其子字符串聚合到主列表中。- 第三个
list/list/widget/explanations有1个<string/>孩子;将其添加到主列表 (masterList)
- 第三个
- 现在
masterList有 3 个字符串:2 个来自第二个小部件,1 个来自第三个小部件
到目前为止,这是我最好的尝试:
boolean buzzesExist = false;
List<String> masterList = new ArrayList<String>();
use(DOMCategory) {
element.normalize();
element.'widget'.each { widget ->
// If widget/buzz is true, then buzzes exist.
if(widget.'buzz'.text) {
buzzesExist = true;
}
// If buzzes exist, then aggregate all explanation strings into
// into "masterList".
if(buzzesExist) {
for(String exp : widget.'explanations')
masterList.add(exp);
}
}
这会运行,但会导致其中masterList包含各种奇怪的 DOM 内容(太大,我无法粘贴)。任何 Groovy 大师都可以发现我要去哪里吗?提前致谢。