У меня есть следующая структура уровня 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?