0

我有一个由Apache Xerces 2.1.9Document创建的 DOM:DocumentBuilder

<x xmlns="#old-namespace">hello, world</x>

现在我正在重命名它的根节点以更改命名空间:

Element root = dom.getDocumentElement();
dom.renameNode(root, "x", "#new-namespace");

然后,我使用 Saxon 9 将文档转换为 text/xml,并且根节点没有更改其名称空间。

这是一个已知的错误/不兼容吗?对于 Saxon 8.7,完全相同的代码可以正常工作。如有必要,我可以发布整个代码。

4

1 回答 1

0

不幸的是,DOM API 允许您创建内部不一致的 DOM。确定元素的命名空间 URI 的方法不止一种,如果 DOM 不一致,这些可能会给出不同的答案(例如,节点的命名空间 URI 属性可能与通过解析前缀获得的命名空间 URI 不对应范围内的命名空间。Saxon 对此无能为力。

(最好的答案不是使用 DOM,而是使用一些更“现代”的树模型,例如 XOM 或 JDOM2)。

于 2013-09-20T13:11:14.940 回答