Skip to content
forked from codegym-ua/Parser

Реалізація XML парсера на основі Скінченних Цифрових Автоматів.

License

Notifications You must be signed in to change notification settings

fairushyn/Parser

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Parser

Реалізація 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

Бажано розробку вести за методологією TDD. Перші тести вже написані в ua.codegym.ParserTest, але можуть бути розширені.

Успіхів!

About

Реалізація XML парсера на основі Скінченних Цифрових Автоматів.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java 100.0%