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

У меня есть XML:

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

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

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

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);
    }
}

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

Другие вопросы по тегам