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

时间:2012-08-03 14:59:29

标签: 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">

我知道如何创建项目Node。我也知道如何使用

设置颜色属性

element.setAttribute("color", "blue")

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

5 个答案:

答案 0 :(得分:11)

我相信你必须使用:

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

答案 1 :(得分:1)

我不认为下面的代码会提供这个问题!

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

这将创建如下元素(使用DOM)

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

因此,这不会向元素添加名称空间属性。所以使用DOM我们可以做类似

的事情
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>

答案 2 :(得分:1)

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

https://www.intertech.com/Blog/jaxb-tutorial-customized-namespace-prefixes-example-using-namespaceprefixmapper/

答案 3 :(得分:0)

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

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

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

答案 4 :(得分:0)

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

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