Как принудительно удалить атрибуты с подразумеваемыми значениями по умолчанию из DTD в Java XML DOM - PullRequest
0 голосов
/ 15 марта 2020

Как я сообщал в другом месте по переполнению стека , я анализирую устаревший модульный документ X HTML 1.1, и DTD добавляет все виды атрибутов по умолчанию, таких как version="-//W3C//DTD XHTML 1.1//EN". Некоторые из них даже неуместны, например xml:space="preserve".

Я пишу утилиту для очистки DOM после анализа, но я забыл, что DOM автоматически добавит обратно атрибуты по умолчанию из DTD, если я удалить их. Так, например, если я вызываю Element.removeAttributeNS(null, "version") для элемента документа, он просто добавляет обратно version="-//W3C//DTD XHTML 1.1//EN", и я возвращаюсь туда, откуда начал.

Как заставить DOM в Java удалить атрибут, даже если DTD указывает, что атрибут имеет подразумеваемое значение? Или как я могу просто изменить / удалить DTD из дерева DOM, чтобы неявные атрибуты не отображались автоматически?

Мне удалось создать новый пустой документ без DTD; импортировать старый элемент документа и его потомков; а затем заменив элемент root в новом документе на импортированное дерево элементов, но это приводит к большим накладным расходам и слишком неэффективно. Есть ли более эффективный обходной путь или решение?

...