Groovy脚本无法解析XML正确
我试图使用Groovy来解析以下XML: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串:从第3小部件
到目前为止,这是我最好的尝试2从第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大师都能找到我要去哪里?提前致谢。
为什么不使用XmlParser?
UPDATE:
list = new XmlParser().parseText xml
widgetWithExplanations = list.breadthFirst()
.findAll { it.buzz.text() == "true" }
masterList = widgetWithExplanations
.collect { it.explanations.string*.text() }
.flatten()
assert masterList == [
"What is the meaning of life?",
"I like the color blue.",
"I could really go for some pizza right now."]
emptyExplanations = widgetWithExplanations
.count { !it.explanations.string }
assert emptyExplanations == 0
否则你domcategory可能缺失里面的for循环。
谢谢@威尔P(+1) - 两次跟进:我将如何检查'说明'大小是否为0,并将其保存到布尔中,(2)如何保存解释到名为'masterList'的名单
已更新。现在它计算有多少解释是空的(变量'emptyExplanations'),并将字符串保存在一个'masterList'变量中 – Will 2013-03-06 20:33:35
再次感谢@ @ P!最后的跟进,我保证! “XmlParser”存储在哪个包中?我无法在Java 6或Java 7中找到它。我需要使用哪些导入语句将其导入脚本并使其可用?再次感谢! – IAmYourFaja 2013-03-06 20:48:23
变量buzzesExist永远不会回到错误,所以在第一个小部件发出嗡嗡声之后,您将alwazs做第二次 – iberbeu 2013-03-06 19:45:53
好抓,但没关系。稍后在脚本中,我检查是否有'buzzesExist',并使用它做其他一些事情。 – IAmYourFaja 2013-03-06 19:49:08
你到底在做什么? – iberbeu 2013-03-06 19:52:59