我们可以在JDOM中更改XML命名空间变量名吗?

时间:2015-05-18 12:00:42

标签: xml xml-parsing xml-namespaces jdom jdom-2

我是一个XML:

<OTC_RM xmlns="OTC_RM_11-0" xmlns:ns2="http://www.fpml.org/2010/FpML-4-9">

我希望使用JDOM将名称空间变量名称从 ns2 更改为其他名称 fp 。 并且更改应该反映整个XML文档。

有可能吗?

1 个答案:

答案 0 :(得分:3)

更改名称很简单,(删除并替换命名空间)。不幸的是,您不太可能为使用该命名空间的实际元素执行此操作。

简单的解决方案是(假设您有一个Element实例otcrm

Namespace fp = Namespace.getNamespace("fp", "http://www.fpml.org/2010/FpML-4-9");
Namespace ns2 = Namespace.getNamespace("ns2", "http://www.fpml.org/2010/FpML-4-9");

otcrm.addNamespaceDeclaration(fp);
otcrm.removeNamespaceDeclaration(ns2);

这将删除ns2声明,并添加fp声明。但这仅适用于指定的Element。任何使用(d)ns2名称空间前缀的子元素都将简单地重新声明&#34;它,并继续使用该前缀。

真正的诀窍是迭代所有子元素,并更改使用它的任何实例。

for (Element e : otcrm.getDescendants(Filters.element())) {
    if (e.getNamespace() == ns2) {
        e.setNamespace(fp);
    }
}

这会将所有元素前缀更改为新元素。