在java中创建xml时,仅在根节点添加命名空间

时间:2015-02-13 13:58:44

标签: java xml dom namespaces

在java中使用DOM Parser创建新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 =&#34;&#34;

由于

1 个答案:

答案 0 :(得分:0)

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

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

输出

     <?xml version="1.0"?>
        <organization xmlns="http://schemas.test">
    <Email xmlns="">test@test.com</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("test@test.com");
        root.appendChild(element);
System.out.print(document.toXML());

这将生成xml如下,只有具有命名空间的根元素 -

    <?xml version="1.0"?>
    <organization xmlns="http://schemas.test">
<Email>test@test.com</Email>
</organization>