前端之家收集整理的这篇文章主要介绍了
Jaxb解析XML转换为JavaBean忽略命名空间,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
/**
* 解析xml(忽略命名空间)
*
* @param cla
* @param content
* @return
* @throws JAXBException
* @throws ParserConfigurationException
* @throws SAXException
*/
public static Object unmarshall(Class<?> cla,String content) throws JAXBException,ParserConfigurationException,SAXException {
JAXBContext jaxbContext = JAXBContext.newInstance(cla);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
StringReader reader = new StringReader(content);
SAXParserFactory sax = SAXParserFactory.newInstance();
sax.setNamespaceAware(false);
XMLReader xmlReader = sax.newSAXParser().getXMLReader();
Source source = new SAXSource(xmlReader,new InputSource(reader));
Object o = unmarshaller.unmarshal(source);
return o;
}
@H_
301_2@先贴上
代码
@H_
301_2@由于各种原因,很多特殊行业的
自定义标准命名空间的URL访问不了,从而导致了Jaxb在将XML
内容转换成JavaBean的时候,
获取命名
错误,而无法解析成功!
@H_
301_2@另一种情况,在XML中的节点
属性中出现xsi:type、xml:lang等
属性性,要求需要节点对应的对象要与设置的类型进行匹配,原本这是严格匹配XML节点格式的行为,是不错的方式;但在实际的操作中,这大大
增加了数据模型,尤其是超大型数据模型的制作复杂程序,希望可以仅将节点与JavaBean进行匹配,相应的数据能填充到数据模型中就好
@H_
301_2@设置
@H_
301_2@SAXParserFactory.setNamespaceAware(false);
@H_
301_2@即可在转换时,忽略命名空间读取,忽略类型检查,完成数据转换