ОК, поскольку никто не ответил на вопрос, я постараюсь сделать это сам.
Я написал все обработчики начального / конечного элементов, и похоже, что libxml больше не создает DOM. По крайней мере, указатель на возвращаемый документ равен NULL. Он по-прежнему настаивает на html и элементах тела, но я могу жить с этим.
Одной из основных проблем является то, что libxml сохраняет все пробельные узлы, несмотря ни на что. Поэтому я должен проанализировать текстовое содержимое, чтобы устранить игнорируемые пробелы. Это некрасиво, но это работает. Стоит ли упоминать, что разбор UTF-8 - это то удовольствие, которое вы редко пропускаете?
Если честно, документация libxml ужасна. Мой совет всем, кто когда-либо пробовал читать документы: вместо этого читайте исходный код. Код гораздо удобнее для чтения и документирования.
Спасибо за внимание.