2012-10-21 82 views
5

我在spring-mvc框架中使用jaxb来生成XML。这是根元素的例子:Jaxb生成的XML - 删除默认的根元素名称空间前缀

<ns2:urlset xmlns:ns2="http://www.example.com"> 

这就是我想要的:

<urlset xmlns="http://www.example.com"> 

我试着用下面的package-info.java删除默认的前缀“NS2”。

@javax.xml.bind.annotation.XmlSchema( 
    namespace = "http://www.example.com", 
    xmlns = {@javax.xml.bind.annotation.XmlNs(namespaceURI = "http://www.example.com", prefix="")}, 
    elementFormDefault = javax.xml.bind.annotation.XmlNsForm.UNQUALIFIED) 
package com.example.code 

如果将前缀设置为其他字符串,则可以将前缀更改为其他值。但前缀不能通过将前缀值设置为“”来删除。它仍然显示默认的“ns2”。有没有办法去除默认的前缀“ns2”?

另一个问题是,如果xml头部中的“standalone”属性也可以被删除?如果是这样,可以通过package-info.java来完成吗?

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
+0

同样的问题=( – ekitru

回答

2

试试这个:

package-info.java

@XmlSchema(
    namespace="http://www.sitemaps.org/schemas/sitemap/0.9", 
    elementFormDefault=XmlNsForm.QUALIFIED) 
package com.example.model; 
import javax.xml.bind.annotation.XmlSchema; 
import javax.xml.bind.annotation.XmlNsForm; 

XmlUrlSet.java

@XmlAccessorType(value = XmlAccessType.NONE) 
@XmlRootElement(name = "urlset", namespace = "http://www.sitemaps.org/schemas/sitemap/0.9") 
public class XmlUrlSet {...} 
0

如果亚历克斯的尖端没有工作,你可能会发现一个bug (至少,我想,这是一个)在jaxb的参考实现中。我只是有同样的问题: 如果我添加一个JaxbElement到我的模型类,jaxb的RI开始忽略我的默认命名空间。我找不到另一个解决方案,而不是切换到Eclipse MOXy(没有任何其他修改),它的工作。 (注意:提防MOXY another bug

也为你的第二个问题,用这个:

JAXBContext jc = JAXBContext.newInstance(...); 
Marshaller m = jc.createMarshaler(); 
m.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE); 
相关问题