我正在尝试用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"/>
答案 0 :(得分:1)
setAttributeNS()
方法需要 QName 。在第二次调用中,您传递了一个非限定属性名称,因此添加了一个默认前缀(ns0
)。由于您调用了两次,因此您有两个属性。
要获得您期望的结果,您只需使用限定属性名称致电setAttributeNS()
一次:
Element manifest = doc.createElement("manifest");
manifest.setAttributeNS(NS_ANDROID, "android:versionName", "bla");
doc.appendChild(manifest);