Если не вести список этих элементов, что я могу сделать?
Ничего: / обычно DTD поддерживает этот список, поэтому вы должны спросить объект dtd, прежде чем выдать endтеги ... но XML :: SAX, кажется, не поддерживает такую вещь, так как он не поддерживает проверку
Другой вариант - сохранение состояния, поэтому вы знаете, когда элемент пуст, и опуская закрывающий тег,но это тоже отвратительно :) как ведение собственного списка
Есть ли в SAX способ прямого отображения элемента в противоположность его восстановлению из того, что передано обработчикам событий?
Нет,SAX не указывает такую вещь, см. Нормативную / эталонную реализацию в Вывод файла XML с помощью SAX Parser
XML :: Twig, с другой стороны, обеспечивает это, см. Документы для
pretty_print => 'indented', # output will be nicely formatted
empty_tags => 'html', # outputs <empty_tag />
Вы хотите использовать XML :: Twig