5

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

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

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

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

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

4

5 回答 5

12

我相信你必须使用:

element.setAttributeNS("http://www.w3.org/2000/xmlns/", "xmlns:acme", "http://www.acme.com/schemas");
于 2012-08-03T15:17:30.307 回答
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>
于 2013-04-16T04:34:07.263 回答
1

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

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

于 2019-10-23T13:19:57.613 回答
0

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

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

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

于 2012-08-03T15:20:11.450 回答
0

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

Element element = doc.createElement("project");
element.attr("xmlns","http://www.imsglobal.org/xsd/ims_qtiasiv1p2");
于 2019-10-17T18:42:42.333 回答