Я пытаюсь использовать 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 строки в нем: 2 из 2 виджета, и 1 из 3 виджета
До сих пор, вот моя лучшая попытка:
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
содержать все виды Bizarro DOM вещей в нем (слишком большой для меня, чтобы вставить). Может ли какое-нибудь Гроуви-гуру найти место, где я буду вздрагивать? Заранее спасибо.
Переменная buzzesExist никогда не возвращается к false, поэтому после первого виджета с шумом вы будете делать второй для – iberbeu
Хороший улов, но все в порядке. Позже в скрипте я проверяю, есть ли 'buzzesExist', и я делаю с ним что-то еще. – IAmYourFaja
Что вы точно получаете в masterList? – iberbeu