2017-06-14 47 views
0

解组我的XML看起来像这样如何忽略元素的属性,而在JAXB

<NMFIISERVICES> 
     <service_status diffgr:id="service_status1" msdata:rowOrder="0" 
      diffgr:hasChanges="inserted"> 
      <service_return_code>0</service_return_code> 
      <service_msg>Success</service_msg> 
     </service_status> 
</NMFIISERVICES> 

而且它给了以下错误

前缀“diffgr”为属性“diffgr:ID”有关联元素类型“service_response”未被绑定。

我需要的XML格式

<NMFIISERVICES> 
     <service_status> 
      <service_return_code>0</service_return_code> 
      <service_msg>Success</service_msg> 
     </service_status> 
</NMFIISERVICES> 

我怎么能忽略上述diffgr属性,而在JAXB

回答

0

解组如果不映射属性,JAXB将自动忽略它。

你的例外来自该JAXB使用,因为你的名字空间不声明XML解析器,你的XML应该是:

<NMFIISERVICES xmlns:diffgr="http://some.namespace" xmlns:msdata="http://some.other.namespace"> 
    <service_status diffgr:id="service_status1" msdata:rowOrder="0" 
     diffgr:hasChanges="inserted"> 
     <service_return_code>0</service_return_code> 
     <service_msg>Success</service_msg> 
    </service_status> 
</NMFIISERVICES> 

如果你不能改变你的XML,你需要将其解析到在解组之前删除属性名称空间。

0

您可以使用如下

class XMLReaderWithoutNamespace extends StreamReaderDelegate { 
    public XMLReaderWithoutNamespace(XMLStreamReader reader) { 
     super(reader); 
    } 
    @Override 
    public String getAttributeNamespace(int arg0) { 
     return ""; 
    } 
    @Override 
    public String getNamespaceURI() { 
     return ""; 
    } 
} 

InputStream is = new FileInputStream(filename); 
XMLStreamReader xsr = XMLInputFactory.newFactory().createXMLStreamReader(is); 
XMLReaderWithoutNamespace xr = new XMLReaderWithoutNamespace(xsr); 
Unmarshaller um = jc.createUnmarshaller(); 
Object res = um.unmarshal(xr); 

它可以让你用一个空字符串替换您diffgr命名空间的解决方案

here