在Java中使用DOM解析器创建新XML时,如何仅在根节点上添加名称空间。

预期的输出是这样的:

<root xmlns = "http://www.mynamespace.com/something/something">
       <data1>
          <parameter>
                 <name>test string</name>
                 <value>test string</value>
             </parameter>
          <parameter>
                 <name>test string</name>
                 <value>test string</value>
             </parameter>
      </data1>
      <data2>
          <parameter>
                 <name>test string</name>
                 <value>test string</value>
             </parameter>
          <parameter>
                 <name>test string</name>
                 <value>test string</value>
             </parameter>
      </data2></root>


我的代码是这样的:

    Namespace ns = Namespace.getNamespace("http://www.mynamespace.com/something/something");
Element root = new Element("root",ns);
Document doc = new Document(root);
doc.setRootElement(root);


我出门是:

<root xmlns="http://www.mynamespace.com/something/something">
   <data1 xmlns="">
          <parameter>
                 <name>test string</name>
                 <value>test string</value>
             </parameter>
          <parameter>
                 <name>test string</name>
                 <value>test string</value>
             </parameter>
      </data1>
      <data2 xmlns="">
          <parameter>
                 <name>test string</name>
                 <value>test string</value>
             </parameter>
          <parameter>
                 <name>test string</name>
                 <value>test string</value>
             </parameter>
      </data> </root>


那就是我不希望<data1><data2>的xmlns =“”

谢谢

最佳答案

当前正面临相同的问题,我正在使用XOM解析器

Element root = new Element("organization", "http://schemas.test");
    Document document = new Document(root);
    Element element = new Element("Email");
    element.appendChild("[email protected]");
    root.appendChild(element);
    System.out.print(document.toXML());


输出是

     <?xml version="1.0"?>
        <organization xmlns="http://schemas.test">
    <Email xmlns="">[email protected]</Email>
</organization>


甚至我也希望名称空间仅出现在根元素组织中。
为此,将相同的名称空间应用于根元素,也应用于子元素。因此它们将与根位于同一名称空间中。

Element root = new Element("organization", "http://schemas.test");
        Document document = new Document(root);
        Element element = new Element("Email","http://schemas.test");
        element.appendChild("[email protected]");
        root.appendChild(element);
System.out.print(document.toXML());


这将产生xml,如下所示,只有具有命名空间的root元素-

    <?xml version="1.0"?>
    <organization xmlns="http://schemas.test">
<Email>[email protected]</Email>
</organization>

09-25 20:43