Можем ли мы изменить имя переменной пространства имен XML в JDOM?

У меня есть XML:

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

Я хочу изменить имя переменной пространства имен с ns2 на что-то другое, скажем fp, используя JDOM. И изменение должно отражаться во всем XML-документе.

Является ли это возможным?


person Dixit Gokhale    schedule 18.05.2015    source источник


Ответы (1)


Изменить имя достаточно просто (удалить и заменить пространство имен). К сожалению, вы вряд ли сможете сделать это для реальных элементов, использующих это пространство имен.

Простое решение (при условии, что у вас есть экземпляр 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, просто «повторно объявят» его и продолжат использовать этот префикс.

Настоящий трюк состоит в том, чтобы перебрать все дочерние элементы и изменить все экземпляры, в которых они используются.

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

Это изменит все префиксы элементов на новые.

person rolfl    schedule 19.05.2015
comment
Спасибо ролфл. Именно то, что я искал. - person Dixit Gokhale; 20.05.2015