Мне нужно эффективно проанализировать потенциально очень большие файлы XML (и, следовательно, не могу поместить весь файл в память). В связи с этим я рассмотрел методы потоковой передачи, такие как XMLStreamReader, однако они выглядят очень низкоуровневыми и дают очень жестко закодированный код:
event = parser.next();
switch (event)
{
case XMLStreamConstants.START_ELEMENT:
elementName = parser.getLocalName();
if (elementName.equals("name")){
state = FOUND_A_NAME;
}else if (elementName.equals("address")){
state = FOUND_AN_ADDRESS;
}
ETC...
}
Я ищу способ сделать это без такой тесной связи синтаксического анализатора с анализируемой вещью, и, кроме того, этот код просто не выглядит правильным. Похоже, это должно быть более по-настоящему ориентировано на события.
Любой совет?