Java 在元素上设置命名空间属性

Java 在元素上设置命名空间属性,java,xml,xml-namespaces,setattribute,Java,Xml,Xml Namespaces,Setattribute,我正在尝试用Java创建一个包含以下元素的XML文档: <project xmlns="http://www.imsglobal.org/xsd/ims_qtiasiv1p2" xmlns:acme="http://www.acme.com/schemas" color="blue"> 我知道如何创建项目节点。我还知道如何使用设置颜色属性 element.setAttribute(“颜色”, “蓝色”) 我是使用setAttribute()

我正在尝试用Java创建一个包含以下元素的XML文档:

<project xmlns="http://www.imsglobal.org/xsd/ims_qtiasiv1p2" 
         xmlns:acme="http://www.acme.com/schemas"
         color="blue">

我知道如何创建项目节点。我还知道如何使用设置颜色属性

element.setAttribute(“颜色”,
“蓝色”)


我是使用setAttribute()以相同的方式设置xmlns和xmlns:acme属性,还是以某种特殊的方式设置,因为它们是命名空间属性?

我认为您必须使用:

element.setAttributeNS("http://www.w3.org/2000/xmlns/", "xmlns:acme", "http://www.acme.com/schemas");

您可以在创建元素时简单地指定名称空间。例如:

myDocument.createElementNS("http://www.imsglobal.org/xsd/ims_qtiasiv1p2","project");

然后java DOM库将为您处理名称空间声明。

我认为下面的代码不会解决这个问题

myDocument.createElementNS("http://www.imsglobal.org/xsd/ims_qtiasiv1p2","project");
这将创建一个如下所示的元素(使用DOM)

因此,它将设置第一个属性,如下所示,您可以用相同的方式设置多个属性

<project xmlns="http://www.imsglobal.org/xsd/ims_qtiasiv1p2>

在2019年,唯一对我有效的方法是使用attr()方法:


简单的回答是:您不需要自己创建xmlns属性。JavaXML类库自动创建这些类。默认情况下,它将自动创建名称空间映射,并根据某些内部算法选择前缀。 如果您不喜欢Java XML序列化程序指定的默认前缀,可以通过创建自己的名称空间解析器来控制它们,如本文所述:


有几种编程模型的示例:另请参见@Jokster的答案:——---
Element request = doc.createElement("project");

Attr attr = doc.createAttribute("xmlns");
attr.setValue("http://www.imsglobal.org/xsd/ims_qtiasiv1p2");

request.setAttributeNode(attr);
<project xmlns="http://www.imsglobal.org/xsd/ims_qtiasiv1p2>
Element element = doc.createElement("project");
element.attr("xmlns","http://www.imsglobal.org/xsd/ims_qtiasiv1p2");