添加了空的默认 XML 命名空间 xmlns="" 属性?

Dmi*_*nov 6 java xml dom xml-parsing

我有简单的代码,我在其中创建根元素并将子元素附加到它。问题是 child 附加了空xmlns=""属性,尽管我不期望它。只是第一个孩子的问题,第二个嵌套级别的孩子已经可以了。

所以,下面的代码 -

DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.newDocument();
Element rootEl = doc.createElementNS("http://someNamespace.ru", "metamodel");
doc.appendChild(rootEl);
Element groupsEl = doc.createElement("groups");
// This appends with xmlns=""
rootEl.appendChild(groupsEl);
Element groupEl = doc.createElement("group");
// This appends normally
groupsEl.appendChild(groupEl);
Run Code Online (Sandbox Code Playgroud)

将导致输出 -

<?xml version="1.0" encoding="UTF-8"?>
<metamodel xmlns="http://someNamespace.ru">
   <groups xmlns="">
      <group/>
   </groups>
</metamodel>
Run Code Online (Sandbox Code Playgroud)

代替 -

<?xml version="1.0" encoding="UTF-8"?>
<metamodel xmlns="http://someNamespace.ru">
   <groups>
      <group/>
   </groups>
</metamodel>
Run Code Online (Sandbox Code Playgroud)

请注意,正如我上面所说,该标签<group>已经从xmlns.

kjh*_*hes 5

您所需的标记显示默认命名空间中的所有元素。为了实现这一点,您必须在默认名称空间中创建所有元素。

您获得的实际输出有<groups xmlns="">because groups,并且它的group子元素是在没有命名空间中创建的:

Element groupsEl = doc.createElement("groups");
Run Code Online (Sandbox Code Playgroud)

将此更改为

Element groupsEl = doc.createElementNS("http://someNamespace.ru", "groups");
Run Code Online (Sandbox Code Playgroud)

同样,改变

Element groupEl = doc.createElement("group");
Run Code Online (Sandbox Code Playgroud)

Element groupEl = doc.createElementNS("http://someNamespace.ru","group");
Run Code Online (Sandbox Code Playgroud)