java - 正在添加空默认 XML 命名空间 xmlns =""属性?

标签 java xml dom xml-parsing

我有简单的代码,我在其中创建根元素并将子元素附加到它。问题是 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/

相关文章:

Java:使用并行流复制文件

php - 如何更改 DOM 中元素的名称?

python - 在 python 中安全的 xml 解析

javascript - 使用 jQuery 对表行重新排序,但排除嵌套表

javascript - 抓取div的id,通过模板文字设置为数字

javascript - 如何在一页 JQuery 上使用多个切换?

java - 将文件保存在磁盘上

java - 向 JMeter WebService(SOAP) 请求添加请求头字段

java - Hibernate HQL批量删除不删除连接表值

java - 如何在Java中使用StAX读取XML的修改片段?