我有简单的代码,我在其中创建根元素并将子元素附加到它。问题是 child 追加空 xmlns=""
属性,虽然我不期望它。这只是第一个 child 的问题,第二个嵌套级别的 child 已经可以了。
所以,下面的代码——
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);
将结果输出——
<?xml version="1.0" encoding="UTF-8"?>
<metamodel xmlns="http://someNamespace.ru">
<groups xmlns="">
<group/>
</groups>
</metamodel>
代替-
<?xml version="1.0" encoding="UTF-8"?>
<metamodel xmlns="http://someNamespace.ru">
<groups>
<group/>
</groups>
</metamodel>
请注意,正如我上面所说,标签 <group>
已经免费了 xmlns
.
最佳答案
您想要的标记显示默认命名空间中的所有元素。为了实现这一点,您必须在默认命名空间中创建所有元素。
你得到的实际输出是<groups xmlns="">
因为groups
, 及其 group
没有在命名空间中创建子元素:
Element groupsEl = doc.createElement("groups");
将此更改为
Element groupsEl = doc.createElementNS("http://someNamespace.ru", "groups");
同理,改
Element groupEl = doc.createElement("group");
到
Element groupEl = doc.createElementNS("http://someNamespace.ru","group");
关于java - 正在添加空默认 XML 命名空间 xmlns =""属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49323227/