首页 > 解决方案 > 如何从 Java XML DOM 中的 DTD 强制删除具有隐含默认值的属性

问题描述

正如我在 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",然后我又回到了开始的地方。

即使 DTD 指示该属性具有隐含值,如何强制 Java 中的 DOM 删除属性?或者我怎样才能从 DOM 树中更改/删除 DTD,以便隐含属性不会自动显示?

我成功地创建了一个没有 DTD 的新的空文档;导入旧文档元素及其后代;然后用导入的元素树替换新文档中的根元素,但是这样开销很大,效率也太低了。是否有更有效的解决方法或解决方案?

标签: javaxmldtdxmldom

解决方案


推荐阅读