Изменение имени достаточно просто (удалить и заменить пространство имен). К сожалению, вы вряд ли сможете это сделать для реальных элементов, которые используют это пространство имен.
Простое решение (если у вас есть 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);
}
}
Это изменит все префиксы элементов на новый.
Спасибо rolfl. Именно то, что я искал. –