Реалізація XML парсера на основі Скінченних Цифрових Автоматів.
Дано потік(InputStream) тексту в форматі XML.
Необхідно прочитати, розібрати на елементи
і делегувати обробку подій клієнським класам(EventHandler).
Парсер повинен працювати за час O(N). Обробляти потоково. Об'єм вхідних даних може перевищувати кількість доступної пам'яті.
Створюємо парсер
Parser parser = XmlFactory.newBuilder()
.on(START_ELEMENT, startHandler)
.on(ATTRIBUTE_NAME, handler)
.on(ATTRIBUTE_VALUE, handler)
.on(VALUE, handler)
.on(END_ELEMENT, handler)
.on(ERROR, handler)
.build();При читанні XML, парсер повинен викликати startHandler і передавати йому ім'я елемента,
коли відкриваючий тег зустрінеться в тексті.
Аналогічно, ми можемо підписатися на інші події.
Щоб обробити, наприклад, відкриваючий тег, треба реалізувати інтерфейс EventHandler.
public interface EventHandler {
void handle(String value);
}Далі ми передаємо текст нашому парсеру
parser.parse(toInputStream("<a class=\"btn\"></a>"));І очікуємо, що наш обробник, відкритих тегів, викличеться 1 раз з аргументом "a".
Бажано розробку вести за методологією TDD.
Перші тести вже написані в ua.codegym.ParserTest, але можуть бути розширені.
Успіхів!