JDOM元素创建

时间:2011-12-10 14:48:58

标签: java xml-namespaces jdom

我是JDOM的新手,在创建文档时遇到了问题。问题是我想要的 能够添加没有“xmlns”属性的元素。我正在使用JDOM 1.1

我找到的所有示例都显示输出没有“xmlns”。这是一个简单的 代码片段及其输出:

      Namespace jwNS = Namespace.getNamespace("http://www.javaworld.com");
      Element myElement = new Element("article", jwNS);
      Document doc = new Document(myElement);
      myElement.addContent(new Element("title").setText("Blah, blah, blah"));

// serialize with two space indents and extra line breaks
try {
  //XMLOutputter serializer = new XMLOutputter("  ", true);
  XMLOutputter serializer = new XMLOutputter(Format.getPrettyFormat());
  serializer.output(doc, System.out);
}
catch (IOException e) {
  System.err.println(e);
}

输出:

<?xml version="1.0" encoding="UTF-8"?>
<article xmlns="http://www.javaworld.com">
  <title xmlns="">Blah, blah, blah</title>
</article>

我想要的只是

<?xml version="1.0" encoding="UTF-8"?>
<article xmlns="http://www.javaworld.com">
  <title>Blah, blah, blah</title>
</article>

谁能告诉我我做错了什么?

2 个答案:

答案 0 :(得分:4)

给出你想要的例子:

<?xml version="1.0" encoding="UTF-8"?>
<article xmlns="http://www.javaworld.com">
  <title>Blah, blah, blah</title>
</article>

这意味着<article>的所有子元素都具有与<article>相同的名称空间,即名称空间从父项继承到子项。这意味着您需要为所有子元素指定jwNS,即

myElement.addContent(new Element("title", jwNS ).setText("Blah, blah, blah"));

在呈现XML输出时,JDOM应该省略<title>中的显式命名空间,因为它从<article>继承它。

只使用new Element("title"),你说你不希望<title>上有任何名称空间,因此JDOm必须添加一个显式xnmns=""属性才能覆盖继承来自jwNS父级的<article>命名空间。

答案 1 :(得分:0)

尝试使用以下方法创建元素:

Element myElement = new Element("article");

而不是

Element myElement = new Element("article", jwNS);