xml - 我们可以更改 JDOM 中的 XML 命名空间变量名称吗?

标签 xml xml-parsing xml-namespaces jdom jdom-2

我有一个 XML:

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

我希望使用 JDOM 将 namespace 变量名称从 ns2 更改为 fp。 并且更改应该反射(reflect)整个 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 声明。但这仅适用于指定的元素。任何使用 ns2 命名空间前缀的子元素都会简单地“重新声明”它,并继续使用该前缀。

真正的技巧是迭代所有子元素,并更改使用它的任何实例。

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

这会将所有元素前缀更改为新的。

关于xml - 我们可以更改 JDOM 中的 XML 命名空间变量名称吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30302680/

相关文章:

php - MySQL 和 PHP 与 Google map - 数据源仅在本地工作,无法从 http url 访问时工作

xml - 在YouTube XML中获取未公开的视频

java - 如何格式化这个 java.sql.date?

XML:只获取一个节点的部分子节点

Javascript Xpath 和默认命名空间

c# - 如何从 CDATA 中删除 href 标签

xml - XSLT 列出多个值

java - 当我单击“保存”按钮时,AsyncTask 发生错误?

c# - 为什么 NamespaceManager 在 XPath 中不使用前缀时不使用 DefaultNamespace

WPF - 全局添加 xaml 命名空间声明