我们可以更改 JDOM 中的 XML 命名空间变量名吗?
Can we change the XML namespace variable name in JDOM?
我有一个 XML:
<OTC_RM xmlns="OTC_RM_11-0" xmlns:ns2="http://www.fpml.org/2010/FpML-4-9">
我希望使用 JDOM 将命名空间变量名称从 ns2 更改为其他名称 fp。
并且更改应反映在整个 XML 文档中。
可能吗?
更改名称很容易(删除并替换名称空间)。不幸的是,您不太可能对使用该命名空间的实际元素执行此操作。
简单的解决方案是(假设您有一个 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 声明。不过,这仅适用于指定的元素。任何使用(d)ns2 命名空间前缀的子元素将简单地 "re-declare" 它,并继续使用该前缀。
真正的诀窍是迭代所有子元素,并更改使用它的任何实例。
for (Element e : otcrm.getDescendants(Filters.element())) {
if (e.getNamespace() == ns2) {
e.setNamespace(fp);
}
}
这会将所有元素前缀更改为新前缀。
我有一个 XML:
<OTC_RM xmlns="OTC_RM_11-0" xmlns:ns2="http://www.fpml.org/2010/FpML-4-9">
我希望使用 JDOM 将命名空间变量名称从 ns2 更改为其他名称 fp。 并且更改应反映在整个 XML 文档中。
可能吗?
更改名称很容易(删除并替换名称空间)。不幸的是,您不太可能对使用该命名空间的实际元素执行此操作。
简单的解决方案是(假设您有一个 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 声明。不过,这仅适用于指定的元素。任何使用(d)ns2 命名空间前缀的子元素将简单地 "re-declare" 它,并继续使用该前缀。
真正的诀窍是迭代所有子元素,并更改使用它的任何实例。
for (Element e : otcrm.getDescendants(Filters.element())) {
if (e.getNamespace() == ns2) {
e.setNamespace(fp);
}
}
这会将所有元素前缀更改为新前缀。