Java DOM:如何添加具有特定前缀的命名空间?

时间:2014-05-24 10:14:30

标签: java xml xml-namespaces

我正在尝试用Java构建一个简单的XML DOM for Android。这工作正常,但Android名称空间前缀始终设置为" ns0"但它应该是" android"

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);

doc = factory.newDocumentBuilder().newDocument();
doc.setXmlStandalone(true);

Element manifest = doc.createElement("manifest");
manifest.setAttributeNS("http://www.w3.org/2000/xmlns/","xmlns:android",NS_ANDROID);
manifest.setAttributeNS(NS_ANDROID, "versionName", "bla");
doc.appendChild(manifest);

我得到的输出如下:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:ns0="http://schemas.android.com/apk/res/android" ns0:versionName="bla"/>

我需要更改以获得以下结果:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
android:versionName="bla"/>

1 个答案:

答案 0 :(得分:1)

setAttributeNS()方法需要 QName 。在第二次调用中,您传递了一个非限定属性名称,因此添加了一个默认前缀(ns0)。由于您调用了两次,因此您有两个属性。

要获得您期望的结果,您只需使用限定属性名称致电setAttributeNS()一次:

Element manifest = doc.createElement("manifest");
manifest.setAttributeNS(NS_ANDROID, "android:versionName", "bla");
doc.appendChild(manifest);