2017-06-14 84 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