我的XML看起来像这样
<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>
它出现以下错误
与元素类型“service_response”关联的属性“diffgr:id”的前缀“diffgr”未绑定。
我需要这种格式的xml
<NMFIISERVICES>
<service_status>
<service_return_code>0</service_return_code>
<service_msg>Success</service_msg>
</service_status>
</NMFIISERVICES>
在JAXB中解组时如何忽略上述 diffgr 属性
答案 0 :(得分:0)
如果不映射属性,JAXB将自动忽略它。
您的异常来自JAXB使用的XML Parser,因为您的名称空间未声明,您的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,则需要解析它以在解组之前删除属性命名空间。
答案 1 :(得分: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