我有简单的代码,我创建根元素并将子元素附加到它。问题是孩子追加了空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);
将结果输出 -
<?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");
to
Element groupEl = doc.createElementNS("http://someNamespace.ru","group");
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)