У меня есть следующая структура уровня XML
. Список ящиков, каждый из которых содержит список ящиков.
<Boxes>
<Box id="0">
<Drawers>
<Drawer id="0"/>
<Drawer id="1"/>
...
</Drawers>
</Box>
<Box id="1">
...
</Box>
</Boxes>
Я разбираю его с помощью StAX
и выставляю структуру через два Iterators
:
-
BoxIterator implements Iterator<Box>, Iterable<Box>
-
Box implements Iterable<Drawer>
-
DrawerIterator implements Iterator<Drawer>
Затем я могу сделать следующее:
BoxIterator boxList;
for (Box box : boxList) {
for (Drawer drawer : box) {
drawer.getId()
}
}
Под капотом тех Iterators
я использую StAX
, и оба они получают доступ к одному и тому же базовому XMLStreamReader
. Если я вызову BoxIterator.next()
, это повлияет на результат, который будет возвращен при последующих вызовах на DrawerIterator.next()
, потому что курсор переместится в следующее поле.
Разве это нарушает договор Iterator
?
Есть ли лучший способ перебора структуры двух уровней с помощью StAX
?