首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java+DOM:如何设置(已经创建的)文档的基本名称空间?

Java+DOM:如何设置(已经创建的)文档的基本名称空间?
EN

Stack Overflow用户
提问于 2009-09-29 13:11:12
回答 8查看 28.8K关注 0票数 19

我正在处理一个已经创建了文档对象的。我必须能够将它的基本名称空间(属性名"xmlns")设置为特定值。我的输入是DOM,类似于:

代码语言:javascript
复制
<root>...some content...</root>

我需要的是DOM,它类似于:

代码语言:javascript
复制
<root xmlns="myNamespace">...some content...</root>

就这样。很简单,不是吗?错了!不是用DOM!

我尝试过以下几种方法:

1)使用doc.getDocumentElement().setAttribute("xmlns","myNamespace")

我得到了一个具有空xmlns的文档(它可以在任何属性名上工作!)

代码语言:javascript
复制
<root xmlns="">...</root>

2)使用renameNode(...)

文档的第一个克隆:

代码语言:javascript
复制
Document input = /*that external Document whose namespace I want to alter*/;

DocumentBuilderFactory BUILDER_FACTORY_NS = DocumentBuilderFactory.newInstance();
BUILDER_FACTORY_NS.setNamespaceAware(true);
Document output = BUILDER_NS.newDocument();
output.appendChild(output.importNode(input.getDocumentElement(), true));

我真的很怀念document.clone(),但也许只有我这么想。

现在,将根节点重命名为

代码语言:javascript
复制
output.renameNode(output.getDocumentElement(),"myNamespace",
    output.getDocumentElement().getTagName());

现在,不是很简单吗?;)

我现在得到的是:

代码语言:javascript
复制
<root xmlns="myNamespace">
    <someElement xmlns=""/>
    <someOtherElement xmlns=""/>
</root>

因此(正如我们所有人所期望的,对吧?),这将仅重命名根节点的名称空间

诅咒你,多姆!

有没有办法以递归的方式做到这一点(不需要编写自己的递归方法)?

请帮帮忙;)

请不要建议我做一些花哨的变通办法,比如把DOM转换成其他东西,改变那里的名称空间,然后再把它转换回来。我需要DOM,因为它是操作XML的最快的标准方法。

注意:我使用的是最新的JDK。

编辑

删除了问题中与名称空间前缀有关的错误假设。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1492428

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档