使用XOM创建XML时减少代码冗余

时间:2012-11-28 08:29:42

标签: java xml xml-serialization xom

我使用XOM作为我的XML解析库。我也用它来创建XML。以下是通过示例描述的场景。

情境:

代码:

Element root =  new Element("atom:entry", "http://www.w3c.org/Atom");
Element city = new Element("info:city", "http://www.myinfo.com/Info");
city.appendChild("My City");
root.appendChild(city);     
Document d = new Document(root);
System.out.println(d.toXML());

生成的XML:

<?xml version="1.0"?>
<atom:entry xmlns:atom="http://www.w3c.org/Atom">
   <info:city xmlns:info="http://www.myinfo.com/Info">
       My City
   </info:city>
</atom:entry>

请注意,XML中info命名空间随节点本身一起添加。但是我需要在root元素中添加它。如下所示

<?xml version="1.0"?>
<atom:entry xmlns:atom="http://www.w3c.org/Atom" xmlns:info="http://www.myinfo.com/Info">
   <info:city>
       My City
   </info:city>
</atom:entry>

要做到这一点,我只需要下面一段代码

Element root =  new Element("atom:entry", "http://www.w3c.org/Atom");
=> root.addNamespaceDeclaration("info", "http://www.myinfo.com/Info");
Element city = new Element("info:city", "http://www.myinfo.com/Info");
... ... ...

问题在这里我必须两次添加http://www.myinfo.com/Info。在我的例子中,有数百个命名空间。所以会有太多的退款。有没有办法摆脱这种冗余?

1 个答案:

答案 0 :(得分:1)

不,没有办法摆脱这种冗余,这是一个刻意的决定。在XOM中,命名空间是元素本身的基本部分,而不是它在文档中的位置的函数。

当然,您总是可以为名称空间URI声明一个命名常量。