Как я сообщал в другом месте на Stack Overflow, я анализирую устаревший модульный документ XHTML 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; импорт старого элемента документа и его потомков; а затем заменить корневой элемент в новом документе импортированным деревом элементов, но это требует больших накладных расходов и слишком неэффективно. Есть ли более эффективный обходной путь или решение?
—
); в противном случае документ может быть неправильно сформирован. - person Garret Wilson   schedule 15.03.2020