Можем ли мы изменить имя переменной пространства имен 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);
}
}
Это изменит все префиксы элементов на новые.